@lattice-php/lattice 0.25.0 → 0.27.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 (150) hide show
  1. package/dist/action/components/action-form.js +3 -3
  2. package/dist/action/components/action-form.js.map +1 -1
  3. package/dist/action/components/action-group.js +1 -1
  4. package/dist/action/components/action-group.js.map +1 -1
  5. package/dist/action/components/action.js +3 -2
  6. package/dist/action/components/action.js.map +1 -1
  7. package/dist/action/hooks/use-action.js +4 -3
  8. package/dist/action/hooks/use-action.js.map +1 -1
  9. package/dist/appearance/index.d.ts +1 -1
  10. package/dist/appearance/index.js +8 -8
  11. package/dist/appearance/index.js.map +1 -1
  12. package/dist/chat/components/chat-box.js +1 -1
  13. package/dist/chat/components/prompt-input.js +1 -2
  14. package/dist/chat/components/prompt-input.js.map +1 -1
  15. package/dist/core/api.d.ts +13 -0
  16. package/dist/core/api.js +38 -4
  17. package/dist/core/api.js.map +1 -1
  18. package/dist/core/component-ref.d.ts +3 -0
  19. package/dist/core/component-ref.js +20 -2
  20. package/dist/core/component-ref.js.map +1 -1
  21. package/dist/core/headers.js +1 -1
  22. package/dist/core/index.js +4 -4
  23. package/dist/create-app.js +8 -3
  24. package/dist/create-app.js.map +1 -1
  25. package/dist/dnd/index.d.ts +16 -0
  26. package/dist/dnd/index.js +13 -0
  27. package/dist/form/components/base/submit-button.d.ts +4 -3
  28. package/dist/form/components/base/submit-button.js +2 -1
  29. package/dist/form/components/base/submit-button.js.map +1 -1
  30. package/dist/form/components/fields/date-picker-field.js +2 -2
  31. package/dist/form/components/fields/date-picker-field.js.map +1 -1
  32. package/dist/form/components/fields/file-upload.js +3 -2
  33. package/dist/form/components/fields/file-upload.js.map +1 -1
  34. package/dist/form/components/fields/number-input.js +1 -1
  35. package/dist/form/components/fields/number-input.js.map +1 -1
  36. package/dist/form/components/fields/rich-editor-field.js +1 -1
  37. package/dist/form/components/fields/rich-editor-field.js.map +1 -1
  38. package/dist/form/components/fields/row-action-menu.js +3 -3
  39. package/dist/form/components/fields/row-action-menu.js.map +1 -1
  40. package/dist/form/components/fields/row-actions.d.ts +1 -1
  41. package/dist/form/components/fields/row-actions.js +4 -4
  42. package/dist/form/components/fields/row-actions.js.map +1 -1
  43. package/dist/form/components/fields/select.js +4 -3
  44. package/dist/form/components/fields/select.js.map +1 -1
  45. package/dist/form/components/fields/toggle.js +1 -1
  46. package/dist/form/components/fields/toggle.js.map +1 -1
  47. package/dist/form/components/form.js +69 -29
  48. package/dist/form/components/form.js.map +1 -1
  49. package/dist/form/components/wizard.js +1 -1
  50. package/dist/form/components/wizard.js.map +1 -1
  51. package/dist/form/hooks/use-form-resolver.js +1 -1
  52. package/dist/form/hooks/use-form-resolver.js.map +1 -1
  53. package/dist/form/hooks/values.d.ts +8 -0
  54. package/dist/form/hooks/values.js +18 -1
  55. package/dist/form/hooks/values.js.map +1 -1
  56. package/dist/i18n/backend.js +1 -1
  57. package/dist/i18n/instance.js +1 -1
  58. package/dist/i18n/timezone.js +1 -1
  59. package/dist/index.d.ts +2 -2
  60. package/dist/index.js +5 -5
  61. package/dist/inertia.d.ts +7 -0
  62. package/dist/inertia.js +19 -1
  63. package/dist/inertia.js.map +1 -1
  64. package/dist/lattice.css +189 -116
  65. package/dist/notifications/components/notification-item.js +3 -1
  66. package/dist/notifications/components/notification-item.js.map +1 -1
  67. package/dist/notifications/components/notifications.js +2 -4
  68. package/dist/notifications/components/notifications.js.map +1 -1
  69. package/dist/remote/components/data-list.js +2 -2
  70. package/dist/table/components/bulk-bar.js +3 -1
  71. package/dist/table/components/bulk-bar.js.map +1 -1
  72. package/dist/table/components/cells/badge-cell.js +3 -6
  73. package/dist/table/components/cells/badge-cell.js.map +1 -1
  74. package/dist/table/components/cells/text-cell.js +6 -9
  75. package/dist/table/components/cells/text-cell.js.map +1 -1
  76. package/dist/table/components/column-filter-control.js +2 -2
  77. package/dist/table/components/column-filter-control.js.map +1 -1
  78. package/dist/table/components/filter-bar.js +1 -1
  79. package/dist/table/components/filter-bar.js.map +1 -1
  80. package/dist/table/components/pagination.js +6 -6
  81. package/dist/table/components/pagination.js.map +1 -1
  82. package/dist/table/hooks/use-table.js +3 -2
  83. package/dist/table/hooks/use-table.js.map +1 -1
  84. package/dist/table/lib/bulk.d.ts +3 -2
  85. package/dist/table/lib/bulk.js +2 -1
  86. package/dist/table/lib/bulk.js.map +1 -1
  87. package/dist/toast/toast.js +3 -1
  88. package/dist/toast/toast.js.map +1 -1
  89. package/dist/toast/variant-styles.js +15 -1
  90. package/dist/toast/variant-styles.js.map +1 -1
  91. package/dist/types/generated.d.ts +14 -9
  92. package/dist/ui/action-menu-context.d.ts +1 -1
  93. package/dist/ui/action-menu-context.js +1 -1
  94. package/dist/ui/action-menu-context.js.map +1 -1
  95. package/dist/ui/affix-group.js +1 -1
  96. package/dist/ui/affix-group.js.map +1 -1
  97. package/dist/ui/badge.d.ts +4 -7
  98. package/dist/ui/badge.js +11 -17
  99. package/dist/ui/badge.js.map +1 -1
  100. package/dist/ui/button.d.ts +6 -5
  101. package/dist/ui/button.js +154 -15
  102. package/dist/ui/button.js.map +1 -1
  103. package/dist/ui/chart-view.js +9 -7
  104. package/dist/ui/chart-view.js.map +1 -1
  105. package/dist/ui/checkbox.js +1 -1
  106. package/dist/ui/checkbox.js.map +1 -1
  107. package/dist/ui/confirm-dialog.d.ts +4 -3
  108. package/dist/ui/confirm-dialog.js +3 -2
  109. package/dist/ui/confirm-dialog.js.map +1 -1
  110. package/dist/ui/control.d.ts +1 -1
  111. package/dist/ui/control.js +1 -1
  112. package/dist/ui/control.js.map +1 -1
  113. package/dist/ui/dialog.js +1 -1
  114. package/dist/ui/dialog.js.map +1 -1
  115. package/dist/ui/dropdown-menu.d.ts +2 -2
  116. package/dist/ui/dropdown-menu.js +2 -2
  117. package/dist/ui/dropdown-menu.js.map +1 -1
  118. package/dist/ui/fragment.js +1 -1
  119. package/dist/ui/icon-button.d.ts +3 -3
  120. package/dist/ui/icon-button.js +6 -6
  121. package/dist/ui/icon-button.js.map +1 -1
  122. package/dist/ui/image-preview.js +1 -1
  123. package/dist/ui/image-preview.js.map +1 -1
  124. package/dist/ui/index.d.ts +2 -2
  125. package/dist/ui/index.js +2 -2
  126. package/dist/ui/info-tooltip.js +1 -1
  127. package/dist/ui/info-tooltip.js.map +1 -1
  128. package/dist/ui/input-otp.js +1 -1
  129. package/dist/ui/input-otp.js.map +1 -1
  130. package/dist/ui/label.js +1 -1
  131. package/dist/ui/label.js.map +1 -1
  132. package/dist/ui/password-input.js +1 -1
  133. package/dist/ui/password-input.js.map +1 -1
  134. package/dist/ui/progress.js +2 -2
  135. package/dist/ui/progress.js.map +1 -1
  136. package/dist/ui/text.js +1 -1
  137. package/dist/ui/tooltip.js +1 -1
  138. package/dist/ui/tooltip.js.map +1 -1
  139. package/dist-standalone/chunks/{chart-view-DEwGTt9d.js → chart-view-CpYsLvzR.js} +4 -4
  140. package/dist-standalone/chunks/date-picker-field-lX8N40Ii.js +1 -0
  141. package/dist-standalone/chunks/{page-props-D3FnL614.js → page-props-ClpVjpOc.js} +1 -1
  142. package/dist-standalone/chunks/{rich-editor-field-B9Nv1qia.js → rich-editor-field-C71csVJv.js} +2 -2
  143. package/dist-standalone/chunks/{subscriptions-C-0lSr7X.js → subscriptions-Bt2s3IF3.js} +1 -1
  144. package/dist-standalone/chunks/use-effect-dispatcher-DGFXSzA6.js +97 -0
  145. package/dist-standalone/lattice.css +1 -1
  146. package/dist-standalone/lattice.js +15 -15
  147. package/dist-standalone/manifest.json +8 -8
  148. package/package.json +9 -1
  149. package/dist-standalone/chunks/date-picker-field-CCQ9nWx0.js +0 -1
  150. package/dist-standalone/chunks/use-effect-dispatcher-EVZxmfoo.js +0 -97
@@ -1 +1 @@
1
- {"version":3,"file":"variant-styles.js","names":[],"sources":["../../resources/js/toast/variant-styles.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport type { ReactNode } from \"react\";\nimport type { Variant } from \"@lattice-php/lattice/types/generated\";\n\nexport const variantStyles: Record<Variant, { accent: string; icon: ReactNode }> = {\n success: {\n accent: \"border-l-lt-success\",\n icon: <Icon name=\"circle-check\" className=\"size-lt-icon-lg shrink-0 text-lt-success\" />,\n },\n info: {\n accent: \"border-l-lt-info\",\n icon: <Icon name=\"info\" className=\"size-lt-icon-lg shrink-0 text-lt-info\" />,\n },\n warning: {\n accent: \"border-l-lt-warning\",\n icon: <Icon name=\"circle-alert\" className=\"size-lt-icon-lg shrink-0 text-lt-warning\" />,\n },\n error: {\n accent: \"border-l-lt-danger\",\n icon: <Icon name=\"circle-x\" className=\"size-lt-icon-lg shrink-0 text-lt-danger\" />,\n },\n};\n"],"mappings":";;;AAIA,IAAa,gBAAsE;CACjF,SAAS;EACP,QAAQ;EACR,MAAM,oBAAC,MAAD;GAAM,MAAK;GAAe,WAAU;EAA4C,CAAA;CACxF;CACA,MAAM;EACJ,QAAQ;EACR,MAAM,oBAAC,MAAD;GAAM,MAAK;GAAO,WAAU;EAAyC,CAAA;CAC7E;CACA,SAAS;EACP,QAAQ;EACR,MAAM,oBAAC,MAAD;GAAM,MAAK;GAAe,WAAU;EAA4C,CAAA;CACxF;CACA,OAAO;EACL,QAAQ;EACR,MAAM,oBAAC,MAAD;GAAM,MAAK;GAAW,WAAU;EAA2C,CAAA;CACnF;AACF"}
1
+ {"version":3,"file":"variant-styles.js","names":[],"sources":["../../resources/js/toast/variant-styles.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport type { ReactNode } from \"react\";\nimport type { Variant } from \"@lattice-php/lattice/types/generated\";\n\nexport const variantStyles: Record<Variant, { accent: string; icon: ReactNode }> = {\n primary: {\n accent: \"border-l-lt-primary\",\n icon: <Icon name=\"info\" className=\"size-lt-icon-lg shrink-0 text-lt-primary\" />,\n },\n secondary: {\n accent: \"border-l-lt-secondary\",\n icon: <Icon name=\"info\" className=\"size-lt-icon-lg shrink-0 text-lt-muted-fg\" />,\n },\n success: {\n accent: \"border-l-lt-success\",\n icon: <Icon name=\"circle-check\" className=\"size-lt-icon-lg shrink-0 text-lt-success\" />,\n },\n info: {\n accent: \"border-l-lt-info\",\n icon: <Icon name=\"info\" className=\"size-lt-icon-lg shrink-0 text-lt-info\" />,\n },\n warning: {\n accent: \"border-l-lt-warning\",\n icon: <Icon name=\"circle-alert\" className=\"size-lt-icon-lg shrink-0 text-lt-warning\" />,\n },\n danger: {\n accent: \"border-l-lt-danger\",\n icon: <Icon name=\"circle-x\" className=\"size-lt-icon-lg shrink-0 text-lt-danger\" />,\n },\n};\n"],"mappings":";;;AAIA,IAAa,gBAAsE;CACjF,SAAS;EACP,QAAQ;EACR,MAAM,oBAAC,MAAD;GAAM,MAAK;GAAO,WAAU;EAA4C,CAAA;CAChF;CACA,WAAW;EACT,QAAQ;EACR,MAAM,oBAAC,MAAD;GAAM,MAAK;GAAO,WAAU;EAA6C,CAAA;CACjF;CACA,SAAS;EACP,QAAQ;EACR,MAAM,oBAAC,MAAD;GAAM,MAAK;GAAe,WAAU;EAA4C,CAAA;CACxF;CACA,MAAM;EACJ,QAAQ;EACR,MAAM,oBAAC,MAAD;GAAM,MAAK;GAAO,WAAU;EAAyC,CAAA;CAC7E;CACA,SAAS;EACP,QAAQ;EACR,MAAM,oBAAC,MAAD;GAAM,MAAK;GAAe,WAAU;EAA4C,CAAA;CACxF;CACA,QAAQ;EACN,QAAQ;EACR,MAAM,oBAAC,MAAD;GAAM,MAAK;GAAW,WAAU;EAA2C,CAAA;CACnF;AACF"}
@@ -103,6 +103,7 @@ export type EffectOf<TType extends string> = string extends TType ? Effect : {
103
103
  };
104
104
  export type Action = {
105
105
  confirmation: Confirmation | null;
106
+ emphasis: Emphasis | null;
106
107
  endpoint: string | null;
107
108
  form: Node<"form"> | null;
108
109
  icon: string | null;
@@ -112,7 +113,7 @@ export type Action = {
112
113
  modalSide: Side | null;
113
114
  modalWidth: ModalWidth | null;
114
115
  ref: string | null;
115
- variant: ButtonVariant | null;
116
+ variant: Variant | null;
116
117
  };
117
118
  export type ActionGroup = {
118
119
  label: string | null;
@@ -135,6 +136,7 @@ export type Avatar = {
135
136
  src: string | null;
136
137
  };
137
138
  export type Badge = {
139
+ color: Color | null;
138
140
  label: string;
139
141
  };
140
142
  export type BadgeColumn = {
@@ -196,6 +198,7 @@ export type Builder = {
196
198
  };
197
199
  export type BulkAction = {
198
200
  confirmation: Confirmation | null;
201
+ emphasis: Emphasis | null;
199
202
  endpoint: string | null;
200
203
  form: Node<"form"> | null;
201
204
  icon: string | null;
@@ -205,20 +208,20 @@ export type BulkAction = {
205
208
  modalSide: Side | null;
206
209
  modalWidth: ModalWidth | null;
207
210
  ref: string | null;
208
- variant: ButtonVariant | null;
211
+ variant: Variant | null;
209
212
  };
210
213
  export type Button = {
211
214
  action: Node<"action"> | Node<"action.bulk"> | null;
212
215
  buttonType: ButtonType;
213
216
  effects: Effect[];
217
+ emphasis: Emphasis | null;
214
218
  href: string | null;
215
219
  icon: string | null;
216
220
  label: string | null;
217
221
  method: HttpMethod | null;
218
- variant: ButtonVariant | null;
222
+ variant: Variant | null;
219
223
  };
220
224
  export type ButtonType = "button" | "submit" | "reset";
221
- export type ButtonVariant = "default" | "destructive" | "ghost" | "info" | "link" | "outline" | "secondary" | "success";
222
225
  export type Callout = {
223
226
  action: Node | null;
224
227
  dismissible: boolean;
@@ -602,6 +605,7 @@ export type EffectPropsMap = {
602
605
  toast: Toast;
603
606
  "toggle-sidebar": ToggleSidebar;
604
607
  };
608
+ export type Emphasis = "solid" | "outline" | "ghost" | "link";
605
609
  export type FieldConditions = {
606
610
  readonly disabled: Condition[];
607
611
  readonly readOnly: Condition[];
@@ -679,9 +683,10 @@ export type Form = {
679
683
  status: string | null;
680
684
  submitButton: boolean;
681
685
  submitButtons: Node<"button">[] | null;
686
+ submitEmphasis: Emphasis | null;
682
687
  submitJustify: Justify | null;
683
688
  submitLabel: string | null;
684
- submitVariant: ButtonVariant | null;
689
+ submitVariant: Variant | null;
685
690
  validationSummaryLabel: string;
686
691
  validationTimeout: number | null;
687
692
  };
@@ -984,12 +989,12 @@ export type Placement = "top" | "bottom" | "right";
984
989
  export type Progress = {
985
990
  color: Color | null;
986
991
  max: number;
992
+ shape: ProgressShape;
987
993
  showValue: boolean;
988
994
  size: Size;
989
995
  value: number;
990
- variant: ProgressVariant;
991
996
  };
992
- export type ProgressVariant = "bar" | "circle";
997
+ export type ProgressShape = "bar" | "circle";
993
998
  export type RawBlock = {
994
999
  html: string;
995
1000
  };
@@ -1065,7 +1070,7 @@ export type RichEditor = {
1065
1070
  value: unknown;
1066
1071
  };
1067
1072
  export type RowAction = {
1068
- destructive: boolean;
1073
+ danger: boolean;
1069
1074
  icon: string | null;
1070
1075
  key: string;
1071
1076
  label: string | null;
@@ -1378,7 +1383,7 @@ export type UiNodeType = "avatar" | "badge" | "button" | "card" | "chart" | "col
1378
1383
  export type UnreadCount = {
1379
1384
  readonly unreadCount: number;
1380
1385
  };
1381
- export type Variant = "success" | "info" | "warning" | "error";
1386
+ export type Variant = "primary" | "secondary" | "success" | "info" | "warning" | "danger";
1382
1387
  export type Width = "full" | "auto" | "sm" | "md" | "lg" | "fill";
1383
1388
  export type Wizard = {
1384
1389
  orientation: Orientation;
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- export declare const actionMenuItemClassName = "flex h-lt-control-sm w-full items-center justify-start gap-2 rounded-lt-sm px-2.5 text-left text-sm font-normal text-lt-popover-fg no-underline decoration-transparent shadow-none transition-colors hover:bg-lt-accent/70 hover:text-lt-popover-fg focus-visible:bg-lt-accent/70 focus-visible:text-lt-popover-fg focus-visible:ring-0 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-lt-icon-sm [&_svg]:text-lt-muted-fg";
2
+ export declare const actionMenuItemClassName = "flex h-lt-control-sm w-full items-center justify-start gap-2 rounded-lt-sm px-2.5 text-left text-sm font-normal text-lt-popover-fg no-underline decoration-transparent shadow-none transition-colors hover:bg-lt-accent/70 hover:text-lt-popover-fg focus-visible:bg-lt-accent/70 focus-visible:text-lt-popover-fg focus-visible:ring-0 focus-visible:outline-none disabled:pointer-events-none disabled:text-lt-disabled-fg [&_svg]:size-lt-icon-sm [&_svg]:text-lt-muted-fg";
3
3
  export declare function ActionMenuProvider({ children }: {
4
4
  children: ReactNode;
5
5
  }): import("react").JSX.Element;
@@ -2,7 +2,7 @@ import { createContext, useContext } from "react";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  //#region resources/js/ui/action-menu-context.tsx
4
4
  var ActionMenuContext = createContext(false);
5
- var actionMenuItemClassName = "flex h-lt-control-sm w-full items-center justify-start gap-2 rounded-lt-sm px-2.5 text-left text-sm font-normal text-lt-popover-fg no-underline decoration-transparent shadow-none transition-colors hover:bg-lt-accent/70 hover:text-lt-popover-fg focus-visible:bg-lt-accent/70 focus-visible:text-lt-popover-fg focus-visible:ring-0 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-lt-icon-sm [&_svg]:text-lt-muted-fg";
5
+ var actionMenuItemClassName = "flex h-lt-control-sm w-full items-center justify-start gap-2 rounded-lt-sm px-2.5 text-left text-sm font-normal text-lt-popover-fg no-underline decoration-transparent shadow-none transition-colors hover:bg-lt-accent/70 hover:text-lt-popover-fg focus-visible:bg-lt-accent/70 focus-visible:text-lt-popover-fg focus-visible:ring-0 focus-visible:outline-none disabled:pointer-events-none disabled:text-lt-disabled-fg [&_svg]:size-lt-icon-sm [&_svg]:text-lt-muted-fg";
6
6
  function ActionMenuProvider({ children }) {
7
7
  return /* @__PURE__ */ jsx(ActionMenuContext.Provider, {
8
8
  value: true,
@@ -1 +1 @@
1
- {"version":3,"file":"action-menu-context.js","names":[],"sources":["../../resources/js/ui/action-menu-context.tsx"],"sourcesContent":["import { createContext, useContext, type ReactNode } from \"react\";\n\nconst ActionMenuContext = createContext(false);\n\nexport const actionMenuItemClassName =\n \"flex h-lt-control-sm w-full items-center justify-start gap-2 rounded-lt-sm px-2.5 text-left text-sm font-normal text-lt-popover-fg no-underline decoration-transparent shadow-none transition-colors hover:bg-lt-accent/70 hover:text-lt-popover-fg focus-visible:bg-lt-accent/70 focus-visible:text-lt-popover-fg focus-visible:ring-0 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-lt-icon-sm [&_svg]:text-lt-muted-fg\";\n\nexport function ActionMenuProvider({ children }: { children: ReactNode }) {\n return <ActionMenuContext.Provider value={true}>{children}</ActionMenuContext.Provider>;\n}\n\nexport function useActionMenu(): boolean {\n return useContext(ActionMenuContext);\n}\n"],"mappings":";;;AAEA,IAAM,oBAAoB,cAAc,KAAK;AAE7C,IAAa,0BACX;AAEF,SAAgB,mBAAmB,EAAE,YAAqC;CACxE,OAAO,oBAAC,kBAAkB,UAAnB;EAA4B,OAAO;EAAO;CAAqC,CAAA;AACxF;AAEA,SAAgB,gBAAyB;CACvC,OAAO,WAAW,iBAAiB;AACrC"}
1
+ {"version":3,"file":"action-menu-context.js","names":[],"sources":["../../resources/js/ui/action-menu-context.tsx"],"sourcesContent":["import { createContext, useContext, type ReactNode } from \"react\";\n\nconst ActionMenuContext = createContext(false);\n\nexport const actionMenuItemClassName =\n \"flex h-lt-control-sm w-full items-center justify-start gap-2 rounded-lt-sm px-2.5 text-left text-sm font-normal text-lt-popover-fg no-underline decoration-transparent shadow-none transition-colors hover:bg-lt-accent/70 hover:text-lt-popover-fg focus-visible:bg-lt-accent/70 focus-visible:text-lt-popover-fg focus-visible:ring-0 focus-visible:outline-none disabled:pointer-events-none disabled:text-lt-disabled-fg [&_svg]:size-lt-icon-sm [&_svg]:text-lt-muted-fg\";\n\nexport function ActionMenuProvider({ children }: { children: ReactNode }) {\n return <ActionMenuContext.Provider value={true}>{children}</ActionMenuContext.Provider>;\n}\n\nexport function useActionMenu(): boolean {\n return useContext(ActionMenuContext);\n}\n"],"mappings":";;;AAEA,IAAM,oBAAoB,cAAc,KAAK;AAE7C,IAAa,0BACX;AAEF,SAAgB,mBAAmB,EAAE,YAAqC;CACxE,OAAO,oBAAC,kBAAkB,UAAnB;EAA4B,OAAO;EAAO;CAAqC,CAAA;AACxF;AAEA,SAAgB,gBAAyB;CACvC,OAAO,WAAW,iBAAiB;AACrC"}
@@ -25,7 +25,7 @@ function AffixSegment({ affix, side, squared = false }) {
25
25
  function AffixGroup({ prefix, suffix, end, children }) {
26
26
  if (!prefix && !suffix && !end) return children("");
27
27
  return /* @__PURE__ */ jsxs("div", {
28
- className: "group flex w-full rounded-lt-sm transition-[color,box-shadow] has-[:focus-visible]:ring-[3px] has-[:focus-visible]:ring-lt-ring/50",
28
+ className: "group flex w-full rounded-lt-sm transition-[color,box-shadow] has-[:focus-visible]:ring-[length:var(--lt-ring-width)] has-[:focus-visible]:ring-lt-ring/50",
29
29
  "data-slot": "affix-group",
30
30
  children: [
31
31
  prefix ? /* @__PURE__ */ jsx(AffixSegment, {
@@ -1 +1 @@
1
- {"version":3,"file":"affix-group.js","names":[],"sources":["../../resources/js/ui/affix-group.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { Affix } from \"@lattice-php/lattice/types/generated\";\nimport { IconRenderer } from \"@lattice-php/lattice/icons\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nfunction AffixSegment({\n affix,\n side,\n squared = false,\n}: {\n affix: Affix;\n side: \"start\" | \"end\";\n squared?: boolean;\n}) {\n return (\n <span\n data-slot={`affix-${side}`}\n className={cn(\n \"inline-flex h-lt-control-md shrink-0 items-center border border-lt-input bg-lt-muted px-3 text-base whitespace-nowrap text-lt-muted-fg\",\n \"group-has-[:focus-visible]:border-lt-ring\",\n side === \"start\" ? \"rounded-l-lt-sm border-r-0\" : \"rounded-r-lt-sm border-l-0\",\n squared && \"rounded-r-none border-r-0\",\n )}\n >\n {affix.icon ? <IconRenderer className=\"size-lt-icon-md\" icon={affix.icon} /> : affix.text}\n </span>\n );\n}\n\n/**\n * Wraps a single-line control in a prefix/suffix input group. The control is a\n * render prop receiving the class names that square the corners adjacent to an\n * affix; with no affixes the control renders untouched.\n *\n * The focus ring lives on the group, not the bare input, so it surrounds the\n * whole control — affixes included — instead of being clipped by the opaque\n * affix segments. The control itself stays the focus target; only its own ring\n * is suppressed.\n */\nexport function AffixGroup({\n prefix,\n suffix,\n end,\n children,\n}: {\n prefix?: Affix | null;\n suffix?: Affix | null;\n end?: ReactNode;\n children: (controlClassName: string) => ReactNode;\n}) {\n if (!prefix && !suffix && !end) {\n return children(\"\");\n }\n\n return (\n <div\n className=\"group flex w-full rounded-lt-sm transition-[color,box-shadow] has-[:focus-visible]:ring-[3px] has-[:focus-visible]:ring-lt-ring/50\"\n data-slot=\"affix-group\"\n >\n {prefix ? <AffixSegment affix={prefix} side=\"start\" /> : null}\n <div className=\"min-w-0 flex-1\">\n {children(\n cn(\n \"focus-visible:ring-0\",\n prefix && \"rounded-l-none\",\n (suffix || end) && \"rounded-r-none\",\n ),\n )}\n </div>\n {suffix ? <AffixSegment affix={suffix} side=\"end\" squared={Boolean(end)} /> : null}\n {end}\n </div>\n );\n}\n"],"mappings":";;;;AAKA,SAAS,aAAa,EACpB,OACA,MACA,UAAU,SAKT;CACD,OACE,oBAAC,QAAD;EACE,aAAW,SAAS;EACpB,WAAW,GACT,0IACA,6CACA,SAAS,UAAU,+BAA+B,8BAClD,WAAW,2BACb;YAEC,MAAM,OAAO,oBAAC,cAAD;GAAc,WAAU;GAAkB,MAAM,MAAM;EAAO,CAAA,IAAI,MAAM;CACjF,CAAA;AAEV;;;;;;;;;;;AAYA,SAAgB,WAAW,EACzB,QACA,QACA,KACA,YAMC;CACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KACzB,OAAO,SAAS,EAAE;CAGpB,OACE,qBAAC,OAAD;EACE,WAAU;EACV,aAAU;YAFZ;GAIG,SAAS,oBAAC,cAAD;IAAc,OAAO;IAAQ,MAAK;GAAS,CAAA,IAAI;GACzD,oBAAC,OAAD;IAAK,WAAU;cACZ,SACC,GACE,wBACA,UAAU,mBACT,UAAU,QAAQ,gBACrB,CACF;GACG,CAAA;GACJ,SAAS,oBAAC,cAAD;IAAc,OAAO;IAAQ,MAAK;IAAM,SAAS,QAAQ,GAAG;GAAI,CAAA,IAAI;GAC7E;EACE;;AAET"}
1
+ {"version":3,"file":"affix-group.js","names":[],"sources":["../../resources/js/ui/affix-group.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { Affix } from \"@lattice-php/lattice/types/generated\";\nimport { IconRenderer } from \"@lattice-php/lattice/icons\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nfunction AffixSegment({\n affix,\n side,\n squared = false,\n}: {\n affix: Affix;\n side: \"start\" | \"end\";\n squared?: boolean;\n}) {\n return (\n <span\n data-slot={`affix-${side}`}\n className={cn(\n \"inline-flex h-lt-control-md shrink-0 items-center border border-lt-input bg-lt-muted px-3 text-base whitespace-nowrap text-lt-muted-fg\",\n \"group-has-[:focus-visible]:border-lt-ring\",\n side === \"start\" ? \"rounded-l-lt-sm border-r-0\" : \"rounded-r-lt-sm border-l-0\",\n squared && \"rounded-r-none border-r-0\",\n )}\n >\n {affix.icon ? <IconRenderer className=\"size-lt-icon-md\" icon={affix.icon} /> : affix.text}\n </span>\n );\n}\n\n/**\n * Wraps a single-line control in a prefix/suffix input group. The control is a\n * render prop receiving the class names that square the corners adjacent to an\n * affix; with no affixes the control renders untouched.\n *\n * The focus ring lives on the group, not the bare input, so it surrounds the\n * whole control — affixes included — instead of being clipped by the opaque\n * affix segments. The control itself stays the focus target; only its own ring\n * is suppressed.\n */\nexport function AffixGroup({\n prefix,\n suffix,\n end,\n children,\n}: {\n prefix?: Affix | null;\n suffix?: Affix | null;\n end?: ReactNode;\n children: (controlClassName: string) => ReactNode;\n}) {\n if (!prefix && !suffix && !end) {\n return children(\"\");\n }\n\n return (\n <div\n className=\"group flex w-full rounded-lt-sm transition-[color,box-shadow] has-[:focus-visible]:ring-[length:var(--lt-ring-width)] has-[:focus-visible]:ring-lt-ring/50\"\n data-slot=\"affix-group\"\n >\n {prefix ? <AffixSegment affix={prefix} side=\"start\" /> : null}\n <div className=\"min-w-0 flex-1\">\n {children(\n cn(\n \"focus-visible:ring-0\",\n prefix && \"rounded-l-none\",\n (suffix || end) && \"rounded-r-none\",\n ),\n )}\n </div>\n {suffix ? <AffixSegment affix={suffix} side=\"end\" squared={Boolean(end)} /> : null}\n {end}\n </div>\n );\n}\n"],"mappings":";;;;AAKA,SAAS,aAAa,EACpB,OACA,MACA,UAAU,SAKT;CACD,OACE,oBAAC,QAAD;EACE,aAAW,SAAS;EACpB,WAAW,GACT,0IACA,6CACA,SAAS,UAAU,+BAA+B,8BAClD,WAAW,2BACb;YAEC,MAAM,OAAO,oBAAC,cAAD;GAAc,WAAU;GAAkB,MAAM,MAAM;EAAO,CAAA,IAAI,MAAM;CACjF,CAAA;AAEV;;;;;;;;;;;AAYA,SAAgB,WAAW,EACzB,QACA,QACA,KACA,YAMC;CACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KACzB,OAAO,SAAS,EAAE;CAGpB,OACE,qBAAC,OAAD;EACE,WAAU;EACV,aAAU;YAFZ;GAIG,SAAS,oBAAC,cAAD;IAAc,OAAO;IAAQ,MAAK;GAAS,CAAA,IAAI;GACzD,oBAAC,OAAD;IAAK,WAAU;cACZ,SACC,GACE,wBACA,UAAU,mBACT,UAAU,QAAQ,gBACrB,CACF;GACG,CAAA;GACJ,SAAS,oBAAC,cAAD;IAAc,OAAO;IAAQ,MAAK;IAAM,SAAS,QAAQ,GAAG;GAAI,CAAA,IAAI;GAC7E;EACE;;AAET"}
@@ -1,12 +1,9 @@
1
- import { VariantProps } from 'class-variance-authority';
1
+ import { Color } from '../types/generated.js';
2
2
  import { RendererComponent } from '../core/types.js';
3
3
  import * as React from "react";
4
- declare const badgeVariants: (props?: ({
5
- variant?: "default" | "destructive" | "outline" | "secondary" | null | undefined;
6
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
- declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<"span"> & VariantProps<typeof badgeVariants> & {
8
- asChild?: boolean;
4
+ declare function Badge({ color, className, style, ...props }: Omit<React.ComponentProps<"span">, "color"> & {
5
+ color?: Color | string | null;
9
6
  }): React.JSX.Element;
10
7
  declare const BadgeComponent: RendererComponent<"badge">;
11
8
  export default BadgeComponent;
12
- export { Badge, badgeVariants };
9
+ export { Badge };
package/dist/ui/badge.js CHANGED
@@ -1,31 +1,25 @@
1
1
  import { cn } from "../lib/utils.js";
2
+ import { coerceColor, namedColor, toneProps } from "../lib/color.js";
2
3
  import "react";
3
4
  import { jsx } from "react/jsx-runtime";
4
- import { Slot } from "@radix-ui/react-slot";
5
- import { cva } from "class-variance-authority";
6
5
  //#region resources/js/ui/badge.tsx
7
- var badgeVariants = cva("inline-flex items-center justify-center rounded-lt-sm border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-lt-icon-xs gap-1 [&>svg]:pointer-events-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger transition-[color,box-shadow] overflow-hidden", {
8
- variants: { variant: {
9
- default: "border-transparent bg-lt-primary text-lt-primary-fg [a&]:hover:bg-lt-primary-hover",
10
- secondary: "border-transparent bg-lt-secondary text-lt-secondary-fg [a&]:hover:bg-lt-secondary-hover",
11
- destructive: "border-transparent bg-lt-danger text-lt-danger-fg [a&]:hover:bg-lt-danger-hover focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40 dark:bg-lt-danger/60",
12
- outline: "border-lt-border text-lt-fg [a&]:hover:bg-lt-accent [a&]:hover:text-lt-accent-fg"
13
- } },
14
- defaultVariants: { variant: "default" }
15
- });
16
- function Badge({ className, variant, asChild = false, ...props }) {
17
- return /* @__PURE__ */ jsx(asChild ? Slot : "span", {
6
+ function Badge({ color, className, style, ...props }) {
7
+ const tone = toneProps(coerceColor(color ?? void 0) ?? namedColor("gray"));
8
+ return /* @__PURE__ */ jsx("span", {
18
9
  "data-slot": "badge",
19
- className: cn(badgeVariants({ variant }), className),
10
+ className: cn("lt-badge", tone.className, className),
11
+ style: {
12
+ ...tone.style,
13
+ ...style
14
+ },
20
15
  ...props
21
16
  });
22
17
  }
23
18
  var BadgeComponent = ({ node }) => /* @__PURE__ */ jsx(Badge, {
24
- variant: "secondary",
25
- className: "w-fit px-3 py-1",
19
+ color: node.props.color,
26
20
  children: node.props.label
27
21
  });
28
22
  //#endregion
29
- export { Badge, badgeVariants, BadgeComponent as default };
23
+ export { Badge, BadgeComponent as default };
30
24
 
31
25
  //# sourceMappingURL=badge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"badge.js","names":[],"sources":["../../resources/js/ui/badge.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-lt-sm border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-lt-icon-xs gap-1 [&>svg]:pointer-events-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-lt-primary text-lt-primary-fg [a&]:hover:bg-lt-primary-hover\",\n secondary:\n \"border-transparent bg-lt-secondary text-lt-secondary-fg [a&]:hover:bg-lt-secondary-hover\",\n destructive:\n \"border-transparent bg-lt-danger text-lt-danger-fg [a&]:hover:bg-lt-danger-hover focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40 dark:bg-lt-danger/60\",\n outline: \"border-lt-border text-lt-fg [a&]:hover:bg-lt-accent [a&]:hover:text-lt-accent-fg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\";\n\n return (\n <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nconst BadgeComponent: RendererComponent<\"badge\"> = ({ node }) => (\n <Badge variant=\"secondary\" className=\"w-fit px-3 py-1\">\n {node.props.label}\n </Badge>\n);\n\nexport default BadgeComponent;\nexport { Badge, badgeVariants };\n"],"mappings":";;;;;;AAMA,IAAM,gBAAgB,IACpB,8ZACA;CACE,UAAU,EACR,SAAS;EACP,SACE;EACF,WACE;EACF,aACE;EACF,SAAS;CACX,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CACF;AAEA,SAAS,MAAM,EACb,WACA,SACA,UAAU,OACV,GAAG,SACyF;CAG5F,OACE,oBAHW,UAAU,OAAO,QAG5B;EAAM,aAAU;EAAQ,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;EAAG,GAAI;CAAQ,CAAA;AAE9F;AAEA,IAAM,kBAA8C,EAAE,WACpD,oBAAC,OAAD;CAAO,SAAQ;CAAY,WAAU;WAClC,KAAK,MAAM;AACP,CAAA"}
1
+ {"version":3,"file":"badge.js","names":[],"sources":["../../resources/js/ui/badge.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { coerceColor, namedColor, toneProps } from \"@lattice-php/lattice/lib/color\";\nimport type { Color } from \"@lattice-php/lattice/types/generated\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\n\nfunction Badge({\n color,\n className,\n style,\n ...props\n}: Omit<React.ComponentProps<\"span\">, \"color\"> & { color?: Color | string | null }) {\n const tone = toneProps(coerceColor(color ?? undefined) ?? namedColor(\"gray\"));\n\n return (\n <span\n data-slot=\"badge\"\n className={cn(\"lt-badge\", tone.className, className)}\n style={{ ...tone.style, ...style }}\n {...props}\n />\n );\n}\n\nconst BadgeComponent: RendererComponent<\"badge\"> = ({ node }) => (\n <Badge color={node.props.color}>{node.props.label}</Badge>\n);\n\nexport default BadgeComponent;\nexport { Badge };\n"],"mappings":";;;;;AAMA,SAAS,MAAM,EACb,OACA,WACA,OACA,GAAG,SAC+E;CAClF,MAAM,OAAO,UAAU,YAAY,SAAS,KAAA,CAAS,KAAK,WAAW,MAAM,CAAC;CAE5E,OACE,oBAAC,QAAD;EACE,aAAU;EACV,WAAW,GAAG,YAAY,KAAK,WAAW,SAAS;EACnD,OAAO;GAAE,GAAG,KAAK;GAAO,GAAG;EAAM;EACjC,GAAI;CACL,CAAA;AAEL;AAEA,IAAM,kBAA8C,EAAE,WACpD,oBAAC,OAAD;CAAO,OAAO,KAAK,MAAM;WAAQ,KAAK,MAAM;AAAa,CAAA"}
@@ -1,13 +1,14 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
2
  import { RendererComponent } from '../core/types.js';
3
- import { ButtonVariant } from '../types/generated.js';
3
+ import { Emphasis, Variant } from '../types/generated.js';
4
4
  import * as React from "react";
5
- export type { ButtonVariant };
5
+ export type { Emphasis, Variant };
6
6
  declare const buttonVariants: (props?: ({
7
- variant?: "link" | "default" | "destructive" | "ghost" | "info" | "outline" | "secondary" | "success" | null | undefined;
8
- size?: "sm" | "lg" | "default" | "icon" | null | undefined;
7
+ emphasis?: "link" | "solid" | "outline" | "ghost" | null | undefined;
8
+ variant?: "primary" | "secondary" | "success" | "info" | "warning" | "danger" | null | undefined;
9
+ size?: "sm" | "md" | "lg" | "icon" | null | undefined;
9
10
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
10
- declare function Button({ className, variant, size, asChild, icon, children, ...props }: React.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
11
+ declare function Button({ className, variant, emphasis, size, asChild, icon, children, ...props }: React.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
11
12
  asChild?: boolean;
12
13
  /** Leading icon glyph. Ignored with `asChild` (Slot needs a single child). */
13
14
  icon?: string;
package/dist/ui/button.js CHANGED
@@ -9,31 +9,165 @@ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
9
9
  import { Slot } from "@radix-ui/react-slot";
10
10
  import { cva } from "class-variance-authority";
11
11
  //#region resources/js/ui/button.tsx
12
- var buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lt-sm text-base font-medium transition-[color,box-shadow] disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-lt-icon-md [&_svg]:shrink-0 outline-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger", {
12
+ var buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lt-sm text-base font-medium transition-[color,box-shadow] disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-lt-icon-md [&_svg]:shrink-0 outline-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[length:var(--lt-ring-width)] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger", {
13
13
  variants: {
14
- variant: {
15
- default: "bg-lt-primary text-lt-primary-fg shadow-lt-xs hover:bg-lt-primary-hover active:bg-lt-primary-active disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:shadow-none",
16
- destructive: "bg-lt-danger text-lt-danger-fg shadow-lt-xs hover:bg-lt-danger-hover active:bg-lt-danger-active focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40 disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:shadow-none",
17
- success: "bg-lt-success text-lt-success-fg shadow-lt-xs hover:bg-lt-success-hover active:bg-lt-success-active disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:shadow-none",
18
- info: "bg-lt-info text-lt-info-fg shadow-lt-xs hover:bg-lt-info-hover active:bg-lt-info-active disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:shadow-none",
14
+ emphasis: {
15
+ solid: "shadow-lt-xs disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:shadow-none",
19
16
  outline: "border border-lt-input bg-lt-bg shadow-lt-xs hover:bg-lt-accent hover:text-lt-accent-fg disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:border-transparent disabled:shadow-none",
20
- secondary: "bg-lt-secondary text-lt-secondary-fg shadow-lt-xs hover:bg-lt-secondary-hover active:bg-lt-secondary-active disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:shadow-none",
21
17
  ghost: "hover:bg-lt-accent hover:text-lt-accent-fg disabled:text-lt-disabled-fg",
22
- link: "text-lt-primary underline-offset-4 hover:underline disabled:text-lt-disabled-fg disabled:no-underline"
18
+ link: "underline-offset-4 hover:underline disabled:text-lt-disabled-fg disabled:no-underline"
19
+ },
20
+ variant: {
21
+ primary: "",
22
+ secondary: "",
23
+ success: "",
24
+ info: "",
25
+ warning: "",
26
+ danger: ""
23
27
  },
24
28
  size: {
25
- default: "h-lt-control-md px-4 py-2 has-[>svg]:px-3",
29
+ md: "h-lt-control-md px-4 py-2 has-[>svg]:px-3",
26
30
  sm: "h-lt-control-sm rounded-lt-sm px-3 has-[>svg]:px-2.5",
27
31
  lg: "h-lt-control-lg rounded-lt-sm px-6 has-[>svg]:px-4",
28
32
  icon: "size-lt-control-md"
29
33
  }
30
34
  },
35
+ compoundVariants: [
36
+ {
37
+ emphasis: "solid",
38
+ variant: "primary",
39
+ class: "bg-lt-primary text-lt-primary-fg hover:bg-lt-primary-hover active:bg-lt-primary-active"
40
+ },
41
+ {
42
+ emphasis: "solid",
43
+ variant: "secondary",
44
+ class: "bg-lt-secondary text-lt-secondary-fg hover:bg-lt-secondary-hover active:bg-lt-secondary-active"
45
+ },
46
+ {
47
+ emphasis: "solid",
48
+ variant: "success",
49
+ class: "bg-lt-success text-lt-success-fg hover:bg-lt-success-hover active:bg-lt-success-active"
50
+ },
51
+ {
52
+ emphasis: "solid",
53
+ variant: "info",
54
+ class: "bg-lt-info text-lt-info-fg hover:bg-lt-info-hover active:bg-lt-info-active"
55
+ },
56
+ {
57
+ emphasis: "solid",
58
+ variant: "warning",
59
+ class: "bg-lt-warning text-lt-warning-fg hover:bg-lt-warning-hover active:bg-lt-warning-active"
60
+ },
61
+ {
62
+ emphasis: "solid",
63
+ variant: "danger",
64
+ class: "bg-lt-danger text-lt-danger-fg hover:bg-lt-danger-hover active:bg-lt-danger-active focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40"
65
+ },
66
+ {
67
+ emphasis: "outline",
68
+ variant: "primary",
69
+ class: "border-lt-primary/40 text-lt-primary hover:bg-lt-primary/10 hover:text-lt-primary"
70
+ },
71
+ {
72
+ emphasis: "outline",
73
+ variant: "secondary",
74
+ class: "border-lt-secondary text-lt-secondary-fg hover:bg-lt-secondary hover:text-lt-secondary-fg"
75
+ },
76
+ {
77
+ emphasis: "outline",
78
+ variant: "success",
79
+ class: "border-lt-success/40 text-lt-success hover:bg-lt-success/10 hover:text-lt-success"
80
+ },
81
+ {
82
+ emphasis: "outline",
83
+ variant: "info",
84
+ class: "border-lt-info/40 text-lt-info hover:bg-lt-info/10 hover:text-lt-info"
85
+ },
86
+ {
87
+ emphasis: "outline",
88
+ variant: "warning",
89
+ class: "border-lt-warning/40 text-lt-warning hover:bg-lt-warning/10 hover:text-lt-warning"
90
+ },
91
+ {
92
+ emphasis: "outline",
93
+ variant: "danger",
94
+ class: "border-lt-danger/40 text-lt-danger hover:bg-lt-danger/10 hover:text-lt-danger"
95
+ },
96
+ {
97
+ emphasis: "ghost",
98
+ variant: "primary",
99
+ class: "text-lt-primary hover:bg-lt-primary/10 hover:text-lt-primary"
100
+ },
101
+ {
102
+ emphasis: "ghost",
103
+ variant: "secondary",
104
+ class: "text-lt-secondary-fg hover:bg-lt-secondary hover:text-lt-secondary-fg"
105
+ },
106
+ {
107
+ emphasis: "ghost",
108
+ variant: "success",
109
+ class: "text-lt-success hover:bg-lt-success/10 hover:text-lt-success"
110
+ },
111
+ {
112
+ emphasis: "ghost",
113
+ variant: "info",
114
+ class: "text-lt-info hover:bg-lt-info/10 hover:text-lt-info"
115
+ },
116
+ {
117
+ emphasis: "ghost",
118
+ variant: "warning",
119
+ class: "text-lt-warning hover:bg-lt-warning/10 hover:text-lt-warning"
120
+ },
121
+ {
122
+ emphasis: "ghost",
123
+ variant: "danger",
124
+ class: "text-lt-danger hover:bg-lt-danger/10 hover:text-lt-danger"
125
+ },
126
+ {
127
+ emphasis: "link",
128
+ variant: "primary",
129
+ class: "text-lt-primary"
130
+ },
131
+ {
132
+ emphasis: "link",
133
+ variant: "secondary",
134
+ class: "text-lt-secondary-fg"
135
+ },
136
+ {
137
+ emphasis: "link",
138
+ variant: "success",
139
+ class: "text-lt-success"
140
+ },
141
+ {
142
+ emphasis: "link",
143
+ variant: "info",
144
+ class: "text-lt-info"
145
+ },
146
+ {
147
+ emphasis: "link",
148
+ variant: "warning",
149
+ class: "text-lt-warning"
150
+ },
151
+ {
152
+ emphasis: "link",
153
+ variant: "danger",
154
+ class: "text-lt-danger"
155
+ }
156
+ ],
31
157
  defaultVariants: {
32
- variant: "default",
33
- size: "default"
158
+ emphasis: "solid",
159
+ size: "md"
34
160
  }
35
161
  });
36
- function Button({ className, variant, size, asChild = false, icon, children, ...props }) {
162
+ /**
163
+ * Solid and link buttons read as primary when no variant is given; outline and
164
+ * ghost stay neutral so chrome buttons do not turn teal by default.
165
+ */
166
+ function resolveButtonVariant(emphasis, variant) {
167
+ if (variant) return variant;
168
+ return (emphasis ?? "solid") === "solid" || emphasis === "link" ? "primary" : void 0;
169
+ }
170
+ function Button({ className, variant, emphasis, size, asChild = false, icon, children, ...props }) {
37
171
  const Comp = asChild ? Slot : "button";
38
172
  const content = icon && !asChild ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Icon, {
39
173
  name: icon,
@@ -42,7 +176,8 @@ function Button({ className, variant, size, asChild = false, icon, children, ...
42
176
  return /* @__PURE__ */ jsx(Comp, {
43
177
  "data-slot": "button",
44
178
  className: cn(buttonVariants({
45
- variant,
179
+ emphasis,
180
+ variant: resolveButtonVariant(emphasis, variant),
46
181
  size,
47
182
  className
48
183
  })),
@@ -52,10 +187,11 @@ function Button({ className, variant, size, asChild = false, icon, children, ...
52
187
  }
53
188
  var ButtonComponent = ({ node }) => {
54
189
  const { label, icon } = node.props;
55
- const variant = node.props.variant ?? "default";
190
+ const variant = node.props.variant ?? null;
191
+ const emphasis = node.props.emphasis ?? "solid";
56
192
  const testId = nodeIdentity(node);
57
193
  const behavior = useClickBehavior(node.props);
58
- const size = icon ? "icon" : "default";
194
+ const size = icon ? "icon" : "md";
59
195
  const content = icon ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(IconRenderer, {
60
196
  className: "size-lt-icon-md",
61
197
  icon
@@ -66,6 +202,7 @@ var ButtonComponent = ({ node }) => {
66
202
  const triggerButton = ({ onClick, processing }) => /* @__PURE__ */ jsx(Button, {
67
203
  "data-test": testId,
68
204
  disabled: processing,
205
+ emphasis,
69
206
  onClick,
70
207
  size,
71
208
  variant,
@@ -74,6 +211,7 @@ var ButtonComponent = ({ node }) => {
74
211
  if (behavior.kind === "navigate") return /* @__PURE__ */ jsx(Button, {
75
212
  asChild: true,
76
213
  "data-test": testId,
214
+ emphasis,
77
215
  variant,
78
216
  size,
79
217
  children: /* @__PURE__ */ jsx(Link, {
@@ -92,6 +230,7 @@ var ButtonComponent = ({ node }) => {
92
230
  });
93
231
  return /* @__PURE__ */ jsx(Button, {
94
232
  "data-test": testId,
233
+ emphasis,
95
234
  size,
96
235
  type: node.props.buttonType,
97
236
  variant,
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","names":[],"sources":["../../resources/js/ui/button.tsx"],"sourcesContent":["import { Link } from \"@inertiajs/react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { Icon, IconRenderer } from \"@lattice-php/lattice/icons\";\nimport { nodeIdentity } from \"@lattice-php/lattice/core/test-id\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { ActionTrigger, type TriggerState, useClickBehavior } from \"./click-behavior\";\nimport type { ButtonVariant } from \"@lattice-php/lattice/types/generated\";\n\nexport type { ButtonVariant };\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lt-sm text-base font-medium transition-[color,box-shadow] disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-lt-icon-md [&_svg]:shrink-0 outline-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger\",\n {\n variants: {\n variant: {\n default:\n \"bg-lt-primary text-lt-primary-fg shadow-lt-xs hover:bg-lt-primary-hover active:bg-lt-primary-active disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:shadow-none\",\n destructive:\n \"bg-lt-danger text-lt-danger-fg shadow-lt-xs hover:bg-lt-danger-hover active:bg-lt-danger-active focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40 disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:shadow-none\",\n success:\n \"bg-lt-success text-lt-success-fg shadow-lt-xs hover:bg-lt-success-hover active:bg-lt-success-active disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:shadow-none\",\n info: \"bg-lt-info text-lt-info-fg shadow-lt-xs hover:bg-lt-info-hover active:bg-lt-info-active disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:shadow-none\",\n outline:\n \"border border-lt-input bg-lt-bg shadow-lt-xs hover:bg-lt-accent hover:text-lt-accent-fg disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:border-transparent disabled:shadow-none\",\n secondary:\n \"bg-lt-secondary text-lt-secondary-fg shadow-lt-xs hover:bg-lt-secondary-hover active:bg-lt-secondary-active disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:shadow-none\",\n ghost: \"hover:bg-lt-accent hover:text-lt-accent-fg disabled:text-lt-disabled-fg\",\n link: \"text-lt-primary underline-offset-4 hover:underline disabled:text-lt-disabled-fg disabled:no-underline\",\n },\n size: {\n default: \"h-lt-control-md px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-lt-control-sm rounded-lt-sm px-3 has-[>svg]:px-2.5\",\n lg: \"h-lt-control-lg rounded-lt-sm px-6 has-[>svg]:px-4\",\n icon: \"size-lt-control-md\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n icon,\n children,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n /** Leading icon glyph. Ignored with `asChild` (Slot needs a single child). */\n icon?: string;\n }) {\n const Comp = asChild ? Slot : \"button\";\n const content =\n icon && !asChild ? (\n <>\n <Icon name={icon} aria-hidden=\"true\" />\n {children}\n </>\n ) : (\n children\n );\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n >\n {content}\n </Comp>\n );\n}\n\nconst ButtonComponent: RendererComponent<\"button\"> = ({ node }) => {\n const { label, icon } = node.props;\n const variant = node.props.variant ?? \"default\";\n const testId = nodeIdentity(node);\n const behavior = useClickBehavior(node.props);\n const size = icon ? \"icon\" : \"default\";\n const content = icon ? (\n <>\n <IconRenderer className=\"size-lt-icon-md\" icon={icon} />\n {label ? <span className=\"sr-only\">{label}</span> : null}\n </>\n ) : (\n label\n );\n\n const triggerButton = ({ onClick, processing }: TriggerState) => (\n <Button\n data-test={testId}\n disabled={processing}\n onClick={onClick}\n size={size}\n variant={variant}\n >\n {content}\n </Button>\n );\n\n if (behavior.kind === \"navigate\") {\n return (\n <Button asChild data-test={testId} variant={variant} size={size}>\n <Link href={behavior.href} method={behavior.method}>\n {content}\n </Link>\n </Button>\n );\n }\n\n if (behavior.kind === \"action\") {\n return <ActionTrigger action={behavior.action}>{triggerButton}</ActionTrigger>;\n }\n\n if (behavior.kind === \"effects\") {\n return triggerButton({ onClick: behavior.onClick, processing: false });\n }\n\n return (\n <Button data-test={testId} size={size} type={node.props.buttonType} variant={variant}>\n {content}\n </Button>\n );\n};\n\nexport default ButtonComponent;\nexport { Button, buttonVariants };\n"],"mappings":";;;;;;;;;;;AAaA,IAAM,iBAAiB,IACrB,+bACA;CACE,UAAU;EACR,SAAS;GACP,SACE;GACF,aACE;GACF,SACE;GACF,MAAM;GACN,SACE;GACF,WACE;GACF,OAAO;GACP,MAAM;EACR;EACA,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,MAAM;EACR;CACF;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;CACR;AACF,CACF;AAEA,SAAS,OAAO,EACd,WACA,SACA,MACA,UAAU,OACV,MACA,UACA,GAAG,SAMA;CACH,MAAM,OAAO,UAAU,OAAO;CAC9B,MAAM,UACJ,QAAQ,CAAC,UACP,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,MAAD;EAAM,MAAM;EAAM,eAAY;CAAQ,CAAA,GACrC,QACD,EAAA,CAAA,IAEF;CAGJ,OACE,oBAAC,MAAD;EACE,aAAU;EACV,WAAW,GAAG,eAAe;GAAE;GAAS;GAAM;EAAU,CAAC,CAAC;EAC1D,GAAI;YAEH;CACG,CAAA;AAEV;AAEA,IAAM,mBAAgD,EAAE,WAAW;CACjE,MAAM,EAAE,OAAO,SAAS,KAAK;CAC7B,MAAM,UAAU,KAAK,MAAM,WAAW;CACtC,MAAM,SAAS,aAAa,IAAI;CAChC,MAAM,WAAW,iBAAiB,KAAK,KAAK;CAC5C,MAAM,OAAO,OAAO,SAAS;CAC7B,MAAM,UAAU,OACd,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,cAAD;EAAc,WAAU;EAAwB;CAAO,CAAA,GACtD,QAAQ,oBAAC,QAAD;EAAM,WAAU;YAAW;CAAY,CAAA,IAAI,IACpD,EAAA,CAAA,IAEF;CAGF,MAAM,iBAAiB,EAAE,SAAS,iBAChC,oBAAC,QAAD;EACE,aAAW;EACX,UAAU;EACD;EACH;EACG;YAER;CACK,CAAA;CAGV,IAAI,SAAS,SAAS,YACpB,OACE,oBAAC,QAAD;EAAQ,SAAA;EAAQ,aAAW;EAAiB;EAAe;YACzD,oBAAC,MAAD;GAAM,MAAM,SAAS;GAAM,QAAQ,SAAS;aACzC;EACG,CAAA;CACA,CAAA;CAIZ,IAAI,SAAS,SAAS,UACpB,OAAO,oBAAC,eAAD;EAAe,QAAQ,SAAS;YAAS;CAA6B,CAAA;CAG/E,IAAI,SAAS,SAAS,WACpB,OAAO,cAAc;EAAE,SAAS,SAAS;EAAS,YAAY;CAAM,CAAC;CAGvE,OACE,oBAAC,QAAD;EAAQ,aAAW;EAAc;EAAM,MAAM,KAAK,MAAM;EAAqB;YAC1E;CACK,CAAA;AAEZ"}
1
+ {"version":3,"file":"button.js","names":[],"sources":["../../resources/js/ui/button.tsx"],"sourcesContent":["import { Link } from \"@inertiajs/react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { Icon, IconRenderer } from \"@lattice-php/lattice/icons\";\nimport { nodeIdentity } from \"@lattice-php/lattice/core/test-id\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { ActionTrigger, type TriggerState, useClickBehavior } from \"./click-behavior\";\nimport type { Emphasis, Variant } from \"@lattice-php/lattice/types/generated\";\n\nexport type { Emphasis, Variant };\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lt-sm text-base font-medium transition-[color,box-shadow] disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-lt-icon-md [&_svg]:shrink-0 outline-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[length:var(--lt-ring-width)] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger\",\n {\n variants: {\n emphasis: {\n solid:\n \"shadow-lt-xs disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:shadow-none\",\n outline:\n \"border border-lt-input bg-lt-bg shadow-lt-xs hover:bg-lt-accent hover:text-lt-accent-fg disabled:bg-lt-disabled disabled:text-lt-disabled-fg disabled:border-transparent disabled:shadow-none\",\n ghost: \"hover:bg-lt-accent hover:text-lt-accent-fg disabled:text-lt-disabled-fg\",\n link: \"underline-offset-4 hover:underline disabled:text-lt-disabled-fg disabled:no-underline\",\n },\n variant: {\n primary: \"\",\n secondary: \"\",\n success: \"\",\n info: \"\",\n warning: \"\",\n danger: \"\",\n },\n size: {\n md: \"h-lt-control-md px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-lt-control-sm rounded-lt-sm px-3 has-[>svg]:px-2.5\",\n lg: \"h-lt-control-lg rounded-lt-sm px-6 has-[>svg]:px-4\",\n icon: \"size-lt-control-md\",\n },\n },\n compoundVariants: [\n {\n emphasis: \"solid\",\n variant: \"primary\",\n class:\n \"bg-lt-primary text-lt-primary-fg hover:bg-lt-primary-hover active:bg-lt-primary-active\",\n },\n {\n emphasis: \"solid\",\n variant: \"secondary\",\n class:\n \"bg-lt-secondary text-lt-secondary-fg hover:bg-lt-secondary-hover active:bg-lt-secondary-active\",\n },\n {\n emphasis: \"solid\",\n variant: \"success\",\n class:\n \"bg-lt-success text-lt-success-fg hover:bg-lt-success-hover active:bg-lt-success-active\",\n },\n {\n emphasis: \"solid\",\n variant: \"info\",\n class: \"bg-lt-info text-lt-info-fg hover:bg-lt-info-hover active:bg-lt-info-active\",\n },\n {\n emphasis: \"solid\",\n variant: \"warning\",\n class:\n \"bg-lt-warning text-lt-warning-fg hover:bg-lt-warning-hover active:bg-lt-warning-active\",\n },\n {\n emphasis: \"solid\",\n variant: \"danger\",\n class:\n \"bg-lt-danger text-lt-danger-fg hover:bg-lt-danger-hover active:bg-lt-danger-active focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40\",\n },\n {\n emphasis: \"outline\",\n variant: \"primary\",\n class: \"border-lt-primary/40 text-lt-primary hover:bg-lt-primary/10 hover:text-lt-primary\",\n },\n {\n emphasis: \"outline\",\n variant: \"secondary\",\n class:\n \"border-lt-secondary text-lt-secondary-fg hover:bg-lt-secondary hover:text-lt-secondary-fg\",\n },\n {\n emphasis: \"outline\",\n variant: \"success\",\n class: \"border-lt-success/40 text-lt-success hover:bg-lt-success/10 hover:text-lt-success\",\n },\n {\n emphasis: \"outline\",\n variant: \"info\",\n class: \"border-lt-info/40 text-lt-info hover:bg-lt-info/10 hover:text-lt-info\",\n },\n {\n emphasis: \"outline\",\n variant: \"warning\",\n class: \"border-lt-warning/40 text-lt-warning hover:bg-lt-warning/10 hover:text-lt-warning\",\n },\n {\n emphasis: \"outline\",\n variant: \"danger\",\n class: \"border-lt-danger/40 text-lt-danger hover:bg-lt-danger/10 hover:text-lt-danger\",\n },\n {\n emphasis: \"ghost\",\n variant: \"primary\",\n class: \"text-lt-primary hover:bg-lt-primary/10 hover:text-lt-primary\",\n },\n {\n emphasis: \"ghost\",\n variant: \"secondary\",\n class: \"text-lt-secondary-fg hover:bg-lt-secondary hover:text-lt-secondary-fg\",\n },\n {\n emphasis: \"ghost\",\n variant: \"success\",\n class: \"text-lt-success hover:bg-lt-success/10 hover:text-lt-success\",\n },\n {\n emphasis: \"ghost\",\n variant: \"info\",\n class: \"text-lt-info hover:bg-lt-info/10 hover:text-lt-info\",\n },\n {\n emphasis: \"ghost\",\n variant: \"warning\",\n class: \"text-lt-warning hover:bg-lt-warning/10 hover:text-lt-warning\",\n },\n {\n emphasis: \"ghost\",\n variant: \"danger\",\n class: \"text-lt-danger hover:bg-lt-danger/10 hover:text-lt-danger\",\n },\n { emphasis: \"link\", variant: \"primary\", class: \"text-lt-primary\" },\n { emphasis: \"link\", variant: \"secondary\", class: \"text-lt-secondary-fg\" },\n { emphasis: \"link\", variant: \"success\", class: \"text-lt-success\" },\n { emphasis: \"link\", variant: \"info\", class: \"text-lt-info\" },\n { emphasis: \"link\", variant: \"warning\", class: \"text-lt-warning\" },\n { emphasis: \"link\", variant: \"danger\", class: \"text-lt-danger\" },\n ],\n defaultVariants: {\n emphasis: \"solid\",\n size: \"md\",\n },\n },\n);\n\n/**\n * Solid and link buttons read as primary when no variant is given; outline and\n * ghost stay neutral so chrome buttons do not turn teal by default.\n */\nfunction resolveButtonVariant(\n emphasis: Emphasis | null | undefined,\n variant: Variant | null | undefined,\n): Variant | undefined {\n if (variant) {\n return variant;\n }\n\n return (emphasis ?? \"solid\") === \"solid\" || emphasis === \"link\" ? \"primary\" : undefined;\n}\n\nfunction Button({\n className,\n variant,\n emphasis,\n size,\n asChild = false,\n icon,\n children,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n /** Leading icon glyph. Ignored with `asChild` (Slot needs a single child). */\n icon?: string;\n }) {\n const Comp = asChild ? Slot : \"button\";\n const content =\n icon && !asChild ? (\n <>\n <Icon name={icon} aria-hidden=\"true\" />\n {children}\n </>\n ) : (\n children\n );\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(\n buttonVariants({\n emphasis,\n variant: resolveButtonVariant(emphasis, variant),\n size,\n className,\n }),\n )}\n {...props}\n >\n {content}\n </Comp>\n );\n}\n\nconst ButtonComponent: RendererComponent<\"button\"> = ({ node }) => {\n const { label, icon } = node.props;\n const variant = node.props.variant ?? null;\n const emphasis = node.props.emphasis ?? \"solid\";\n const testId = nodeIdentity(node);\n const behavior = useClickBehavior(node.props);\n const size = icon ? \"icon\" : \"md\";\n const content = icon ? (\n <>\n <IconRenderer className=\"size-lt-icon-md\" icon={icon} />\n {label ? <span className=\"sr-only\">{label}</span> : null}\n </>\n ) : (\n label\n );\n\n const triggerButton = ({ onClick, processing }: TriggerState) => (\n <Button\n data-test={testId}\n disabled={processing}\n emphasis={emphasis}\n onClick={onClick}\n size={size}\n variant={variant}\n >\n {content}\n </Button>\n );\n\n if (behavior.kind === \"navigate\") {\n return (\n <Button asChild data-test={testId} emphasis={emphasis} variant={variant} size={size}>\n <Link href={behavior.href} method={behavior.method}>\n {content}\n </Link>\n </Button>\n );\n }\n\n if (behavior.kind === \"action\") {\n return <ActionTrigger action={behavior.action}>{triggerButton}</ActionTrigger>;\n }\n\n if (behavior.kind === \"effects\") {\n return triggerButton({ onClick: behavior.onClick, processing: false });\n }\n\n return (\n <Button\n data-test={testId}\n emphasis={emphasis}\n size={size}\n type={node.props.buttonType}\n variant={variant}\n >\n {content}\n </Button>\n );\n};\n\nexport default ButtonComponent;\nexport { Button, buttonVariants };\n"],"mappings":";;;;;;;;;;;AAaA,IAAM,iBAAiB,IACrB,udACA;CACE,UAAU;EACR,UAAU;GACR,OACE;GACF,SACE;GACF,OAAO;GACP,MAAM;EACR;EACA,SAAS;GACP,SAAS;GACT,WAAW;GACX,SAAS;GACT,MAAM;GACN,SAAS;GACT,QAAQ;EACV;EACA,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,MAAM;EACR;CACF;CACA,kBAAkB;EAChB;GACE,UAAU;GACV,SAAS;GACT,OACE;EACJ;EACA;GACE,UAAU;GACV,SAAS;GACT,OACE;EACJ;EACA;GACE,UAAU;GACV,SAAS;GACT,OACE;EACJ;EACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;EACT;EACA;GACE,UAAU;GACV,SAAS;GACT,OACE;EACJ;EACA;GACE,UAAU;GACV,SAAS;GACT,OACE;EACJ;EACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;EACT;EACA;GACE,UAAU;GACV,SAAS;GACT,OACE;EACJ;EACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;EACT;EACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;EACT;EACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;EACT;EACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;EACT;EACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;EACT;EACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;EACT;EACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;EACT;EACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;EACT;EACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;EACT;EACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;EACT;EACA;GAAE,UAAU;GAAQ,SAAS;GAAW,OAAO;EAAkB;EACjE;GAAE,UAAU;GAAQ,SAAS;GAAa,OAAO;EAAuB;EACxE;GAAE,UAAU;GAAQ,SAAS;GAAW,OAAO;EAAkB;EACjE;GAAE,UAAU;GAAQ,SAAS;GAAQ,OAAO;EAAe;EAC3D;GAAE,UAAU;GAAQ,SAAS;GAAW,OAAO;EAAkB;EACjE;GAAE,UAAU;GAAQ,SAAS;GAAU,OAAO;EAAiB;CACjE;CACA,iBAAiB;EACf,UAAU;EACV,MAAM;CACR;AACF,CACF;;;;;AAMA,SAAS,qBACP,UACA,SACqB;CACrB,IAAI,SACF,OAAO;CAGT,QAAQ,YAAY,aAAa,WAAW,aAAa,SAAS,YAAY,KAAA;AAChF;AAEA,SAAS,OAAO,EACd,WACA,SACA,UACA,MACA,UAAU,OACV,MACA,UACA,GAAG,SAMA;CACH,MAAM,OAAO,UAAU,OAAO;CAC9B,MAAM,UACJ,QAAQ,CAAC,UACP,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,MAAD;EAAM,MAAM;EAAM,eAAY;CAAQ,CAAA,GACrC,QACD,EAAA,CAAA,IAEF;CAGJ,OACE,oBAAC,MAAD;EACE,aAAU;EACV,WAAW,GACT,eAAe;GACb;GACA,SAAS,qBAAqB,UAAU,OAAO;GAC/C;GACA;EACF,CAAC,CACH;EACA,GAAI;YAEH;CACG,CAAA;AAEV;AAEA,IAAM,mBAAgD,EAAE,WAAW;CACjE,MAAM,EAAE,OAAO,SAAS,KAAK;CAC7B,MAAM,UAAU,KAAK,MAAM,WAAW;CACtC,MAAM,WAAW,KAAK,MAAM,YAAY;CACxC,MAAM,SAAS,aAAa,IAAI;CAChC,MAAM,WAAW,iBAAiB,KAAK,KAAK;CAC5C,MAAM,OAAO,OAAO,SAAS;CAC7B,MAAM,UAAU,OACd,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,cAAD;EAAc,WAAU;EAAwB;CAAO,CAAA,GACtD,QAAQ,oBAAC,QAAD;EAAM,WAAU;YAAW;CAAY,CAAA,IAAI,IACpD,EAAA,CAAA,IAEF;CAGF,MAAM,iBAAiB,EAAE,SAAS,iBAChC,oBAAC,QAAD;EACE,aAAW;EACX,UAAU;EACA;EACD;EACH;EACG;YAER;CACK,CAAA;CAGV,IAAI,SAAS,SAAS,YACpB,OACE,oBAAC,QAAD;EAAQ,SAAA;EAAQ,aAAW;EAAkB;EAAmB;EAAe;YAC7E,oBAAC,MAAD;GAAM,MAAM,SAAS;GAAM,QAAQ,SAAS;aACzC;EACG,CAAA;CACA,CAAA;CAIZ,IAAI,SAAS,SAAS,UACpB,OAAO,oBAAC,eAAD;EAAe,QAAQ,SAAS;YAAS;CAA6B,CAAA;CAG/E,IAAI,SAAS,SAAS,WACpB,OAAO,cAAc;EAAE,SAAS,SAAS;EAAS,YAAY;CAAM,CAAC;CAGvE,OACE,oBAAC,QAAD;EACE,aAAW;EACD;EACJ;EACN,MAAM,KAAK,MAAM;EACR;YAER;CACK,CAAA;AAEZ"}
@@ -38,15 +38,17 @@ var tooltipProps = {
38
38
  labelStyle: { color: "var(--lt-muted-fg)" }
39
39
  };
40
40
  var palette = [
41
- "var(--lt-primary)",
42
- "var(--lt-success)",
43
- "var(--lt-info)",
44
- "var(--lt-warning)",
45
- "var(--lt-danger)",
46
- "var(--lt-muted-fg)"
41
+ "var(--lt-chart-1)",
42
+ "var(--lt-chart-2)",
43
+ "var(--lt-chart-3)",
44
+ "var(--lt-chart-4)",
45
+ "var(--lt-chart-5)",
46
+ "var(--lt-chart-6)",
47
+ "var(--lt-chart-7)",
48
+ "var(--lt-chart-8)"
47
49
  ];
48
50
  function colorAt(index) {
49
- return palette[index % palette.length] ?? "var(--lt-primary)";
51
+ return palette[index % palette.length] ?? "var(--lt-chart-1)";
50
52
  }
51
53
  function datumColor(datum, series, index) {
52
54
  if (isRecord(datum)) {