@lattice-php/lattice 0.1.0 → 0.2.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.
- package/dist/_virtual/_rolldown/runtime.js +8 -0
- package/dist/action/components/action-form.d.ts +24 -0
- package/dist/action/components/action-form.js +270 -0
- package/dist/action/components/action-form.js.map +1 -0
- package/dist/action/components/action-group.d.ts +1 -8
- package/dist/action/components/action-group.js +24 -66
- package/dist/action/components/action-group.js.map +1 -1
- package/dist/action/components/action.d.ts +1 -24
- package/dist/action/components/action.js +61 -46
- package/dist/action/components/action.js.map +1 -1
- package/dist/action/effects.d.ts +6 -25
- package/dist/action/effects.js +2 -2
- package/dist/action/effects.js.map +1 -1
- package/dist/action/index.d.ts +1 -1
- package/dist/core/components/badge.d.ts +1 -8
- package/dist/core/components/badge.js +2 -3
- package/dist/core/components/badge.js.map +1 -1
- package/dist/core/components/button.d.ts +4 -12
- package/dist/core/components/button.js +6 -9
- package/dist/core/components/button.js.map +1 -1
- package/dist/core/components/card.d.ts +1 -9
- package/dist/core/components/card.js +1 -3
- package/dist/core/components/card.js.map +1 -1
- package/dist/core/components/confirm-dialog.d.ts +2 -3
- package/dist/core/components/confirm-dialog.js +19 -13
- package/dist/core/components/confirm-dialog.js.map +1 -1
- package/dist/core/components/fragment.d.ts +1 -10
- package/dist/core/components/fragment.js +5 -6
- package/dist/core/components/fragment.js.map +1 -1
- package/dist/core/components/grid.d.ts +1 -8
- package/dist/core/components/grid.js +1 -2
- package/dist/core/components/grid.js.map +1 -1
- package/dist/core/components/heading.d.ts +1 -9
- package/dist/core/components/heading.js +2 -3
- package/dist/core/components/heading.js.map +1 -1
- package/dist/core/components/icon.d.ts +3 -0
- package/dist/core/components/icon.js +30 -0
- package/dist/core/components/icon.js.map +1 -0
- package/dist/core/components/index.d.ts +1 -1
- package/dist/core/components/index.js +4 -0
- package/dist/core/components/index.js.map +1 -1
- package/dist/core/components/link.d.ts +1 -12
- package/dist/core/components/link.js +4 -9
- package/dist/core/components/link.js.map +1 -1
- package/dist/core/components/modal.d.ts +1 -11
- package/dist/core/components/modal.js +27 -31
- package/dist/core/components/modal.js.map +1 -1
- package/dist/core/components/section.d.ts +3 -0
- package/dist/core/components/section.js +79 -0
- package/dist/core/components/section.js.map +1 -0
- package/dist/core/components/segmented-control.d.ts +1 -14
- package/dist/core/components/segmented-control.js +4 -7
- package/dist/core/components/segmented-control.js.map +1 -1
- package/dist/core/components/segmented-pills.d.ts +4 -2
- package/dist/core/components/segmented-pills.js +10 -1
- package/dist/core/components/segmented-pills.js.map +1 -1
- package/dist/core/components/spinner.js +8 -4
- package/dist/core/components/spinner.js.map +1 -1
- package/dist/core/components/stack.d.ts +1 -11
- package/dist/core/components/stack.js +5 -5
- package/dist/core/components/stack.js.map +1 -1
- package/dist/core/components/tabs.d.ts +1 -19
- package/dist/core/components/tabs.js +45 -21
- package/dist/core/components/tabs.js.map +1 -1
- package/dist/core/components/text.d.ts +1 -9
- package/dist/core/components/text.js +2 -3
- package/dist/core/components/text.js.map +1 -1
- package/dist/core/registry.d.ts +9 -3
- package/dist/core/registry.js +21 -5
- package/dist/core/registry.js.map +1 -1
- package/dist/core/renderer.js +7 -13
- package/dist/core/renderer.js.map +1 -1
- package/dist/core/types.d.ts +54 -26
- package/dist/form/components/base/checkbox.js +5 -2
- package/dist/form/components/base/checkbox.js.map +1 -1
- package/dist/form/components/base/field.d.ts +2 -1
- package/dist/form/components/base/field.js +5 -1
- package/dist/form/components/base/field.js.map +1 -1
- package/dist/form/components/base/password-input.js +9 -2
- package/dist/form/components/base/password-input.js.map +1 -1
- package/dist/form/components/base/submit-button.d.ts +4 -4
- package/dist/form/components/base/submit-button.js +2 -2
- package/dist/form/components/base/submit-button.js.map +1 -1
- package/dist/form/components/conditions.d.ts +6 -9
- package/dist/form/components/conditions.js +10 -2
- package/dist/form/components/conditions.js.map +1 -1
- package/dist/form/components/context.d.ts +0 -4
- package/dist/form/components/context.js +1 -5
- package/dist/form/components/context.js.map +1 -1
- package/dist/form/components/field-props.d.ts +24 -0
- package/dist/form/components/field-props.js +15 -0
- package/dist/form/components/field-props.js.map +1 -0
- package/dist/form/components/fields/checkbox.d.ts +1 -15
- package/dist/form/components/fields/checkbox.js +16 -21
- package/dist/form/components/fields/checkbox.js.map +1 -1
- package/dist/form/components/fields/choice.d.ts +1 -13
- package/dist/form/components/fields/choice.js +13 -20
- package/dist/form/components/fields/choice.js.map +1 -1
- package/dist/form/components/fields/date-input.d.ts +1 -19
- package/dist/form/components/fields/date-input.js +11 -16
- package/dist/form/components/fields/date-input.js.map +1 -1
- package/dist/form/components/fields/hidden-input.d.ts +1 -9
- package/dist/form/components/fields/hidden-input.js +2 -3
- package/dist/form/components/fields/hidden-input.js.map +1 -1
- package/dist/form/components/fields/number-input.d.ts +1 -22
- package/dist/form/components/fields/number-input.js +38 -41
- package/dist/form/components/fields/number-input.js.map +1 -1
- package/dist/form/components/fields/password-input.d.ts +1 -28
- package/dist/form/components/fields/password-input.js +15 -24
- package/dist/form/components/fields/password-input.js.map +1 -1
- package/dist/form/components/fields/rich-editor.d.ts +1 -16
- package/dist/form/components/fields/rich-editor.js +57 -47
- package/dist/form/components/fields/rich-editor.js.map +1 -1
- package/dist/form/components/fields/select.d.ts +1 -22
- package/dist/form/components/fields/select.js +85 -74
- package/dist/form/components/fields/select.js.map +1 -1
- package/dist/form/components/fields/simple-field.d.ts +9 -0
- package/dist/form/components/fields/simple-field.js +22 -0
- package/dist/form/components/fields/simple-field.js.map +1 -0
- package/dist/form/components/fields/text-input.d.ts +1 -20
- package/dist/form/components/fields/text-input.js +12 -17
- package/dist/form/components/fields/text-input.js.map +1 -1
- package/dist/form/components/fields/textarea.d.ts +1 -19
- package/dist/form/components/fields/textarea.js +11 -16
- package/dist/form/components/fields/textarea.js.map +1 -1
- package/dist/form/components/form.d.ts +1 -20
- package/dist/form/components/form.js +29 -36
- package/dist/form/components/form.js.map +1 -1
- package/dist/form/components/index.d.ts +0 -1
- package/dist/form/components/index.js +1 -2
- package/dist/form/components/resolved-nodes.d.ts +1 -1
- package/dist/form/components/resolved-nodes.js +2 -2
- package/dist/form/components/resolved-nodes.js.map +1 -1
- package/dist/form/components/types.d.ts +1 -0
- package/dist/form/components/use-controlled-field.d.ts +3 -9
- package/dist/form/components/use-controlled-field.js +5 -9
- package/dist/form/components/use-controlled-field.js.map +1 -1
- package/dist/form/components/use-dependent-field.d.ts +1 -1
- package/dist/form/components/use-dependent-field.js +8 -8
- package/dist/form/components/use-dependent-field.js.map +1 -1
- package/dist/form/components/use-form-resolver.d.ts +1 -1
- package/dist/form/components/use-form-resolver.js +8 -13
- package/dist/form/components/use-form-resolver.js.map +1 -1
- package/dist/form/components/use-seed-default.d.ts +5 -0
- package/dist/form/components/use-seed-default.js +23 -0
- package/dist/form/components/use-seed-default.js.map +1 -0
- package/dist/form/index.d.ts +1 -1
- package/dist/form/index.js +0 -1
- package/dist/form/index.js.map +1 -1
- package/dist/form/skeleton.d.ts +1 -1
- package/dist/form/skeleton.js +1 -1
- package/dist/form/skeleton.js.map +1 -1
- package/dist/i18n/backend.d.ts +24 -0
- package/dist/i18n/backend.js +39 -0
- package/dist/i18n/backend.js.map +1 -0
- package/dist/i18n/index.d.ts +3 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/instance.js +48 -0
- package/dist/i18n/instance.js.map +1 -0
- package/dist/icons/icon-renderer.js +30 -5
- package/dist/icons/icon-renderer.js.map +1 -1
- package/dist/icons/index.d.ts +2 -0
- package/dist/icons/index.js +2 -1
- package/dist/icons/sprite.d.ts +30 -0
- package/dist/icons/sprite.js +40 -0
- package/dist/icons/sprite.js.map +1 -0
- package/dist/index.d.ts +9 -5
- package/dist/index.js +7 -3
- package/dist/inertia.d.ts +1 -6
- package/dist/inertia.js +4 -8
- package/dist/inertia.js.map +1 -1
- package/dist/lattice.css +129 -5
- package/dist/layout/components.d.ts +1 -0
- package/dist/layout/components.js +19 -0
- package/dist/layout/components.js.map +1 -0
- package/dist/layout/context.d.ts +12 -0
- package/dist/layout/context.js +19 -0
- package/dist/layout/context.js.map +1 -0
- package/dist/layout/index.d.ts +3 -0
- package/dist/layout/index.js +4 -0
- package/dist/layout/menu-item.d.ts +3 -0
- package/dist/layout/menu-item.js +130 -0
- package/dist/layout/menu-item.js.map +1 -0
- package/dist/layout/menu.d.ts +3 -0
- package/dist/layout/menu.js +13 -0
- package/dist/layout/menu.js.map +1 -0
- package/dist/layout/outlet.d.ts +6 -0
- package/dist/layout/outlet.js +14 -0
- package/dist/layout/outlet.js.map +1 -0
- package/dist/layout/schema-layout.d.ts +10 -0
- package/dist/layout/schema-layout.js +30 -0
- package/dist/layout/schema-layout.js.map +1 -0
- package/dist/layout/sidebar.d.ts +3 -0
- package/dist/layout/sidebar.js +48 -0
- package/dist/layout/sidebar.js.map +1 -0
- package/dist/lib/utils.d.ts +0 -2
- package/dist/lib/utils.js +1 -4
- package/dist/lib/utils.js.map +1 -1
- package/dist/node_modules/i18next/dist/esm/i18next.js +1982 -0
- package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -0
- package/dist/node_modules/i18next-http-backend/esm/index.js +352 -0
- package/dist/node_modules/i18next-http-backend/esm/index.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/context.js +23 -0
- package/dist/node_modules/react-i18next/dist/es/context.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/defaults.js +29 -0
- package/dist/node_modules/react-i18next/dist/es/defaults.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/i18nInstance.js +10 -0
- package/dist/node_modules/react-i18next/dist/es/i18nInstance.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/initReactI18next.js +14 -0
- package/dist/node_modules/react-i18next/dist/es/initReactI18next.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/unescape.js +30 -0
- package/dist/node_modules/react-i18next/dist/es/unescape.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/useTranslation.js +157 -0
- package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/utils.js +58 -0
- package/dist/node_modules/react-i18next/dist/es/utils.js.map +1 -0
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +70 -0
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -0
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +61 -0
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js.map +1 -0
- package/dist/node_modules/use-sync-external-store/shim/index.js +13 -0
- package/dist/node_modules/use-sync-external-store/shim/index.js.map +1 -0
- package/dist/page.d.ts +1 -1
- package/dist/page.js +2 -2
- package/dist/page.js.map +1 -1
- package/dist/provider.d.ts +8 -3
- package/dist/provider.js +17 -9
- package/dist/provider.js.map +1 -1
- package/dist/registry.d.ts +1 -1
- package/dist/registry.js +2 -1
- package/dist/registry.js.map +1 -1
- package/dist/table/bulk.d.ts +6 -10
- package/dist/table/bulk.js +13 -35
- package/dist/table/bulk.js.map +1 -1
- package/dist/table/column-registry.d.ts +9 -0
- package/dist/table/components/bulk-bar.js +34 -3
- package/dist/table/components/bulk-bar.js.map +1 -1
- package/dist/table/components/cells/badge-cell.d.ts +5 -0
- package/dist/table/components/cells/badge-cell.js +16 -0
- package/dist/table/components/cells/badge-cell.js.map +1 -0
- package/dist/table/components/cells/icon-cell.d.ts +5 -0
- package/dist/table/components/cells/icon-cell.js +22 -0
- package/dist/table/components/cells/icon-cell.js.map +1 -0
- package/dist/table/components/cells/image-cell.d.ts +5 -0
- package/dist/table/components/cells/image-cell.js +24 -0
- package/dist/table/components/cells/image-cell.js.map +1 -0
- package/dist/table/components/cells/text-cell.d.ts +6 -0
- package/dist/table/components/cells/text-cell.js +50 -0
- package/dist/table/components/cells/text-cell.js.map +1 -0
- package/dist/table/components/column-filter-control.js +59 -96
- package/dist/table/components/column-filter-control.js.map +1 -1
- package/dist/table/components/column-header.js +22 -11
- package/dist/table/components/column-header.js.map +1 -1
- package/dist/table/components/filter-stack-bar.d.ts +2 -2
- package/dist/table/components/filter-stack-bar.js +10 -8
- package/dist/table/components/filter-stack-bar.js.map +1 -1
- package/dist/table/components/filter-value-input.d.ts +5 -3
- package/dist/table/components/filter-value-input.js +25 -16
- package/dist/table/components/filter-value-input.js.map +1 -1
- package/dist/table/components/pagination.d.ts +1 -1
- package/dist/table/components/pagination.js +20 -8
- package/dist/table/components/pagination.js.map +1 -1
- package/dist/table/components/sort-bar.d.ts +2 -2
- package/dist/table/components/sort-bar.js +12 -10
- package/dist/table/components/sort-bar.js.map +1 -1
- package/dist/table/components/table-action-node.d.ts +1 -1
- package/dist/table/components/table-action-node.js +1 -1
- package/dist/table/components/table-action-node.js.map +1 -1
- package/dist/table/components/table-cell.d.ts +1 -1
- package/dist/table/components/table-cell.js +24 -43
- package/dist/table/components/table-cell.js.map +1 -1
- package/dist/table/components/table.d.ts +6 -2
- package/dist/table/components/table.js +40 -17
- package/dist/table/components/table.js.map +1 -1
- package/dist/table/format.js +5 -3
- package/dist/table/format.js.map +1 -1
- package/dist/table/index.d.ts +1 -1
- package/dist/table/index.js.map +1 -1
- package/dist/table/payload.d.ts +1 -1
- package/dist/table/query.d.ts +0 -1
- package/dist/table/query.js +8 -9
- package/dist/table/query.js.map +1 -1
- package/dist/table/types.d.ts +38 -42
- package/dist/table/use-table.d.ts +3 -4
- package/dist/table/use-table.js +12 -23
- package/dist/table/use-table.js.map +1 -1
- package/dist/test-support.d.ts +14 -0
- package/dist/test-support.js +14 -0
- package/dist/test-support.js.map +1 -0
- package/dist/toast/index.d.ts +1 -0
- package/dist/toast/index.js +2 -0
- package/dist/toast/toaster.d.ts +3 -0
- package/dist/toast/toaster.js +126 -0
- package/dist/toast/toaster.js.map +1 -0
- package/dist/types/generated.d.ts +677 -0
- package/dist/types/generated.js +0 -0
- package/dist/types/index.d.ts +1 -1
- package/package.json +18 -3
- package/resources/icons/align-center.svg +17 -0
- package/resources/icons/align-justify.svg +17 -0
- package/resources/icons/align-left.svg +17 -0
- package/resources/icons/align-right.svg +17 -0
- package/resources/icons/arrow-down.svg +16 -0
- package/resources/icons/arrow-up.svg +16 -0
- package/resources/icons/bold.svg +15 -0
- package/resources/icons/check.svg +15 -0
- package/resources/icons/chevron-down.svg +15 -0
- package/resources/icons/chevron-right.svg +15 -0
- package/resources/icons/chevrons-up-down.svg +16 -0
- package/resources/icons/circle-alert.svg +17 -0
- package/resources/icons/circle-check.svg +16 -0
- package/resources/icons/circle-help.svg +17 -0
- package/resources/icons/circle-x.svg +17 -0
- package/resources/icons/code.svg +16 -0
- package/resources/icons/columns-3.svg +17 -0
- package/resources/icons/copy.svg +16 -0
- package/resources/icons/external-link.svg +17 -0
- package/resources/icons/eye-off.svg +18 -0
- package/resources/icons/eye.svg +16 -0
- package/resources/icons/filter.svg +15 -0
- package/resources/icons/heading-1.svg +18 -0
- package/resources/icons/heading-2.svg +18 -0
- package/resources/icons/heading-3.svg +19 -0
- package/resources/icons/highlighter.svg +16 -0
- package/resources/icons/info.svg +17 -0
- package/resources/icons/italic.svg +17 -0
- package/resources/icons/layout-dashboard.svg +18 -0
- package/resources/icons/link.svg +16 -0
- package/resources/icons/list-ordered.svg +20 -0
- package/resources/icons/list.svg +20 -0
- package/resources/icons/loader-2.svg +15 -0
- package/resources/icons/minus.svg +15 -0
- package/resources/icons/more-horizontal.svg +17 -0
- package/resources/icons/panel-left.svg +16 -0
- package/resources/icons/pencil-line.svg +17 -0
- package/resources/icons/pencil.svg +16 -0
- package/resources/icons/plus.svg +16 -0
- package/resources/icons/quote.svg +16 -0
- package/resources/icons/rows-3.svg +17 -0
- package/resources/icons/search.svg +16 -0
- package/resources/icons/send.svg +16 -0
- package/resources/icons/settings.svg +16 -0
- package/resources/icons/smile.svg +18 -0
- package/resources/icons/strikethrough.svg +17 -0
- package/resources/icons/table.svg +18 -0
- package/resources/icons/trash-2.svg +19 -0
- package/resources/icons/underline.svg +16 -0
- package/resources/icons/x.svg +16 -0
- package/dist/core/props.d.ts +0 -14
- package/dist/core/props.js +0 -30
- package/dist/core/props.js.map +0 -1
- package/dist/form/components/fields/submit-button.d.ts +0 -10
- package/dist/form/components/fields/submit-button.js +0 -14
- package/dist/form/components/fields/submit-button.js.map +0 -1
- package/dist/generated/types.d.ts +0 -17
- package/dist/icons/default-icons.d.ts +0 -3
- package/dist/icons/default-icons.js +0 -44
- package/dist/icons/default-icons.js.map +0 -1
- package/dist/icons/dynamic-lucide-renderer.d.ts +0 -2
- package/dist/icons/dynamic-lucide-renderer.js +0 -18
- package/dist/icons/dynamic-lucide-renderer.js.map +0 -1
- package/dist/menu/index.d.ts +0 -1
- package/dist/menu/index.js +0 -2
- package/dist/menu/use-menu.d.ts +0 -2
- package/dist/menu/use-menu.js +0 -9
- package/dist/menu/use-menu.js.map +0 -1
- /package/dist/{generated/types.js → table/column-registry.js} +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { cn } from "../../lib/utils.js";
|
|
2
|
+
import { IconRenderer } from "../../icons/icon-renderer.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region resources/js/core/components/icon.tsx
|
|
5
|
+
var sizeClass = {
|
|
6
|
+
xs: "size-lt-icon-xs",
|
|
7
|
+
sm: "size-lt-icon-sm",
|
|
8
|
+
md: "size-lt-icon-md",
|
|
9
|
+
lg: "size-lt-icon-lg",
|
|
10
|
+
xl: "size-lt-icon-xl"
|
|
11
|
+
};
|
|
12
|
+
var colorClass = {
|
|
13
|
+
muted: "text-lt-muted-fg",
|
|
14
|
+
primary: "text-lt-primary",
|
|
15
|
+
success: "text-lt-success",
|
|
16
|
+
info: "text-lt-info",
|
|
17
|
+
warning: "text-lt-warning",
|
|
18
|
+
danger: "text-lt-danger"
|
|
19
|
+
};
|
|
20
|
+
var IconComponent = ({ node }) => {
|
|
21
|
+
const { name, size, color, class: className } = node.props;
|
|
22
|
+
return /* @__PURE__ */ jsx(IconRenderer, {
|
|
23
|
+
icon: name,
|
|
24
|
+
className: cn(sizeClass[size], color ? colorClass[color] : void 0, className)
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
//#endregion
|
|
28
|
+
export { IconComponent as default };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon.js","names":[],"sources":["../../../resources/js/core/components/icon.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { IconRenderer } from \"@lattice/lattice/icons\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport type { Color, Size } from \"@lattice/lattice/types/generated\";\n\nconst sizeClass: Record<Size, string> = {\n xs: \"size-lt-icon-xs\",\n sm: \"size-lt-icon-sm\",\n md: \"size-lt-icon-md\",\n lg: \"size-lt-icon-lg\",\n xl: \"size-lt-icon-xl\",\n};\n\nconst colorClass: Record<Color, string> = {\n muted: \"text-lt-muted-fg\",\n primary: \"text-lt-primary\",\n success: \"text-lt-success\",\n info: \"text-lt-info\",\n warning: \"text-lt-warning\",\n danger: \"text-lt-danger\",\n};\n\nconst IconComponent: RendererComponent<\"icon\"> = ({ node }) => {\n const { name, size, color, class: className } = node.props;\n\n return (\n <IconRenderer\n icon={name}\n className={cn(sizeClass[size], color ? colorClass[color] : undefined, className)}\n />\n );\n};\n\nexport default IconComponent;\n"],"mappings":";;;;AAKA,IAAM,YAAkC;CACtC,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAM,aAAoC;CACxC,OAAO;CACP,SAAS;CACT,SAAS;CACT,MAAM;CACN,SAAS;CACT,QAAQ;AACV;AAEA,IAAM,iBAA4C,EAAE,WAAW;CAC7D,MAAM,EAAE,MAAM,MAAM,OAAO,OAAO,cAAc,KAAK;CAErD,OACE,oBAAC,cAAD;EACE,MAAM;EACN,WAAW,GAAG,UAAU,OAAO,QAAQ,WAAW,SAAS,KAAA,GAAW,SAAS;CAChF,CAAA;AAEL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const coreComponents: import('
|
|
1
|
+
export declare const coreComponents: import('../registry').Plugin;
|
|
@@ -5,8 +5,10 @@ import CardComponent from "./card.js";
|
|
|
5
5
|
import FragmentComponent from "./fragment.js";
|
|
6
6
|
import GridComponent from "./grid.js";
|
|
7
7
|
import HeadingComponent from "./heading.js";
|
|
8
|
+
import IconComponent from "./icon.js";
|
|
8
9
|
import LinkComponent from "./link.js";
|
|
9
10
|
import ModalComponent from "./modal.js";
|
|
11
|
+
import SectionComponent from "./section.js";
|
|
10
12
|
import SegmentedControlComponent from "./segmented-control.js";
|
|
11
13
|
import StackComponent from "./stack.js";
|
|
12
14
|
import TabComponent, { TabsComponent } from "./tabs.js";
|
|
@@ -20,8 +22,10 @@ var coreComponents = createPlugin({
|
|
|
20
22
|
fragment: eagerComponent(FragmentComponent),
|
|
21
23
|
grid: eagerComponent(GridComponent),
|
|
22
24
|
heading: eagerComponent(HeadingComponent),
|
|
25
|
+
icon: eagerComponent(IconComponent),
|
|
23
26
|
link: eagerComponent(LinkComponent),
|
|
24
27
|
modal: eagerComponent(ModalComponent),
|
|
28
|
+
section: eagerComponent(SectionComponent),
|
|
25
29
|
"segmented-control": eagerComponent(SegmentedControlComponent),
|
|
26
30
|
stack: eagerComponent(StackComponent),
|
|
27
31
|
tab: eagerComponent(TabComponent),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../resources/js/core/components/index.ts"],"sourcesContent":["import { createPlugin, eagerComponent } from \"@lattice/lattice/core/registry\";\nimport BadgeComponent from \"./badge\";\nimport ButtonComponent from \"./button\";\nimport CardComponent from \"./card\";\nimport FragmentComponent from \"./fragment\";\nimport GridComponent from \"./grid\";\nimport HeadingComponent from \"./heading\";\nimport LinkComponent from \"./link\";\nimport ModalComponent from \"./modal\";\nimport SegmentedControlComponent from \"./segmented-control\";\nimport StackComponent from \"./stack\";\nimport TabComponent, { TabsComponent } from \"./tabs\";\nimport TextComponent from \"./text\";\n\nexport const coreComponents = createPlugin({\n components: {\n badge: eagerComponent(BadgeComponent),\n button: eagerComponent(ButtonComponent),\n card: eagerComponent(CardComponent),\n fragment: eagerComponent(FragmentComponent),\n grid: eagerComponent(GridComponent),\n heading: eagerComponent(HeadingComponent),\n link: eagerComponent(LinkComponent),\n modal: eagerComponent(ModalComponent),\n \"segmented-control\": eagerComponent(SegmentedControlComponent),\n stack: eagerComponent(StackComponent),\n tab: eagerComponent(TabComponent),\n tabs: eagerComponent(TabsComponent),\n text: eagerComponent(TextComponent),\n },\n name: \"lattice/core\",\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../resources/js/core/components/index.ts"],"sourcesContent":["import { createPlugin, eagerComponent } from \"@lattice/lattice/core/registry\";\nimport BadgeComponent from \"./badge\";\nimport ButtonComponent from \"./button\";\nimport CardComponent from \"./card\";\nimport FragmentComponent from \"./fragment\";\nimport GridComponent from \"./grid\";\nimport HeadingComponent from \"./heading\";\nimport IconComponent from \"./icon\";\nimport LinkComponent from \"./link\";\nimport ModalComponent from \"./modal\";\nimport SectionComponent from \"./section\";\nimport SegmentedControlComponent from \"./segmented-control\";\nimport StackComponent from \"./stack\";\nimport TabComponent, { TabsComponent } from \"./tabs\";\nimport TextComponent from \"./text\";\n\nexport const coreComponents = createPlugin({\n components: {\n badge: eagerComponent(BadgeComponent),\n button: eagerComponent(ButtonComponent),\n card: eagerComponent(CardComponent),\n fragment: eagerComponent(FragmentComponent),\n grid: eagerComponent(GridComponent),\n heading: eagerComponent(HeadingComponent),\n icon: eagerComponent(IconComponent),\n link: eagerComponent(LinkComponent),\n modal: eagerComponent(ModalComponent),\n section: eagerComponent(SectionComponent),\n \"segmented-control\": eagerComponent(SegmentedControlComponent),\n stack: eagerComponent(StackComponent),\n tab: eagerComponent(TabComponent),\n tabs: eagerComponent(TabsComponent),\n text: eagerComponent(TextComponent),\n },\n name: \"lattice/core\",\n});\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,IAAa,iBAAiB,aAAa;CACzC,YAAY;EACV,OAAO,eAAe,cAAc;EACpC,QAAQ,eAAe,eAAe;EACtC,MAAM,eAAe,aAAa;EAClC,UAAU,eAAe,iBAAiB;EAC1C,MAAM,eAAe,aAAa;EAClC,SAAS,eAAe,gBAAgB;EACxC,MAAM,eAAe,aAAa;EAClC,MAAM,eAAe,aAAa;EAClC,OAAO,eAAe,cAAc;EACpC,SAAS,eAAe,gBAAgB;EACxC,qBAAqB,eAAe,yBAAyB;EAC7D,OAAO,eAAe,cAAc;EACpC,KAAK,eAAe,YAAY;EAChC,MAAM,eAAe,aAAa;EAClC,MAAM,eAAe,aAAa;CACpC;CACA,MAAM;AACR,CAAC"}
|
|
@@ -1,17 +1,6 @@
|
|
|
1
|
-
import { Method } from '@inertiajs/core';
|
|
2
1
|
import { Link } from '@inertiajs/react';
|
|
3
2
|
import { ComponentProps } from 'react';
|
|
4
|
-
import { RendererComponent } from '
|
|
5
|
-
declare module '../../../../core/types' {
|
|
6
|
-
interface ComponentProps {
|
|
7
|
-
link: {
|
|
8
|
-
href?: string;
|
|
9
|
-
label?: string;
|
|
10
|
-
method?: Method;
|
|
11
|
-
tabIndex?: number;
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
}
|
|
3
|
+
import { RendererComponent } from '../types';
|
|
15
4
|
declare function TextLink({ className, children, ...props }: ComponentProps<typeof Link>): import("react").JSX.Element;
|
|
16
5
|
declare const LinkComponent: RendererComponent<"link">;
|
|
17
6
|
export default LinkComponent;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { cn } from "../../lib/utils.js";
|
|
2
|
-
import { getOptionalNumberProp, getStringProp } from "../props.js";
|
|
3
2
|
import { Link } from "@inertiajs/react";
|
|
4
3
|
import { jsx } from "react/jsx-runtime";
|
|
5
4
|
//#region resources/js/core/components/link.tsx
|
|
@@ -10,15 +9,11 @@ function TextLink({ className = "", children, ...props }) {
|
|
|
10
9
|
children
|
|
11
10
|
});
|
|
12
11
|
}
|
|
13
|
-
function getLinkMethod(method) {
|
|
14
|
-
if (method === "delete" || method === "patch" || method === "post" || method === "put") return method;
|
|
15
|
-
return "get";
|
|
16
|
-
}
|
|
17
12
|
var LinkComponent = ({ node }) => /* @__PURE__ */ jsx(TextLink, {
|
|
18
|
-
href:
|
|
19
|
-
method:
|
|
20
|
-
tabIndex:
|
|
21
|
-
children:
|
|
13
|
+
href: node.props.href ?? "#",
|
|
14
|
+
method: node.props.method ?? "get",
|
|
15
|
+
tabIndex: node.props.tabIndex ?? void 0,
|
|
16
|
+
children: node.props.label
|
|
22
17
|
});
|
|
23
18
|
//#endregion
|
|
24
19
|
export { TextLink, LinkComponent as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","names":[],"sources":["../../../resources/js/core/components/link.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"link.js","names":[],"sources":["../../../resources/js/core/components/link.tsx"],"sourcesContent":["import { Link } from \"@inertiajs/react\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\n\nfunction TextLink({ className = \"\", children, ...props }: ComponentProps<typeof Link>) {\n return (\n <Link\n className={cn(\n \"text-lt-fg underline decoration-lt-border underline-offset-4 transition-colors duration-300 ease-out hover:decoration-current! dark:decoration-lt-border\",\n className,\n )}\n {...props}\n >\n {children}\n </Link>\n );\n}\n\nconst LinkComponent: RendererComponent<\"link\"> = ({ node }) => (\n <TextLink\n href={node.props.href ?? \"#\"}\n method={node.props.method ?? \"get\"}\n tabIndex={node.props.tabIndex ?? undefined}\n >\n {node.props.label}\n </TextLink>\n);\n\nexport default LinkComponent;\nexport { TextLink };\n"],"mappings":";;;;AAKA,SAAS,SAAS,EAAE,YAAY,IAAI,UAAU,GAAG,SAAsC;CACrF,OACE,oBAAC,MAAD;EACE,WAAW,GACT,4JACA,SACF;EACA,GAAI;EAEH;CACG,CAAA;AAEV;AAEA,IAAM,iBAA4C,EAAE,WAClD,oBAAC,UAAD;CACE,MAAM,KAAK,MAAM,QAAQ;CACzB,QAAQ,KAAK,MAAM,UAAU;CAC7B,UAAU,KAAK,MAAM,YAAY,KAAA;WAEhC,KAAK,MAAM;AACJ,CAAA"}
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
import { RendererComponent } from '
|
|
2
|
-
declare module '../../../../core/types' {
|
|
3
|
-
interface ComponentProps {
|
|
4
|
-
modal: {
|
|
5
|
-
closeLabel?: string;
|
|
6
|
-
description?: string;
|
|
7
|
-
open?: boolean;
|
|
8
|
-
title?: string;
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
}
|
|
1
|
+
import { RendererComponent } from '../types';
|
|
12
2
|
declare const ModalComponent: RendererComponent<"modal">;
|
|
13
3
|
export default ModalComponent;
|
|
@@ -1,21 +1,19 @@
|
|
|
1
|
-
import { getStringProp } from "../props.js";
|
|
2
1
|
import { Button } from "./button.js";
|
|
2
|
+
import { Icon } from "../../icons/sprite.js";
|
|
3
3
|
import { LATTICE_EVENT } from "../../events/event-names.js";
|
|
4
4
|
import { useEffect, useState } from "react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
import
|
|
6
|
+
import * as Dialog from "@radix-ui/react-dialog";
|
|
7
7
|
//#region resources/js/core/components/modal.tsx
|
|
8
8
|
function matchesModal(event, modal) {
|
|
9
9
|
const target = event.detail?.modal;
|
|
10
|
-
return target
|
|
10
|
+
return target == null || target === modal;
|
|
11
11
|
}
|
|
12
12
|
var ModalComponent = ({ children, node }) => {
|
|
13
|
-
const title =
|
|
14
|
-
const description =
|
|
15
|
-
const closeLabel =
|
|
16
|
-
const [isOpen, setIsOpen] = useState(node.props
|
|
17
|
-
const titleId = `${node.id ?? node.key ?? "lattice-modal"}-title`;
|
|
18
|
-
const descriptionId = `${node.id ?? node.key ?? "lattice-modal"}-description`;
|
|
13
|
+
const title = node.props.title ?? "Dialog";
|
|
14
|
+
const description = node.props.description;
|
|
15
|
+
const closeLabel = node.props.closeLabel;
|
|
16
|
+
const [isOpen, setIsOpen] = useState(node.props.open === true);
|
|
19
17
|
useEffect(() => {
|
|
20
18
|
function open(event) {
|
|
21
19
|
if (node.id && matchesModal(event, node.id)) setIsOpen(true);
|
|
@@ -30,43 +28,41 @@ var ModalComponent = ({ children, node }) => {
|
|
|
30
28
|
window.removeEventListener(LATTICE_EVENT.closeModal, close);
|
|
31
29
|
};
|
|
32
30
|
}, [node.id]);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
children: /* @__PURE__ */ jsxs("
|
|
37
|
-
"aria-describedby":
|
|
38
|
-
"
|
|
39
|
-
"aria-modal": "true",
|
|
40
|
-
className: "max-h-[min(680px,calc(100vh-2rem))] w-full max-w-lg overflow-y-auto rounded-lt border border-lt-border bg-lt-bg p-6 shadow-lg",
|
|
41
|
-
role: "dialog",
|
|
31
|
+
return /* @__PURE__ */ jsx(Dialog.Root, {
|
|
32
|
+
open: isOpen,
|
|
33
|
+
onOpenChange: setIsOpen,
|
|
34
|
+
children: /* @__PURE__ */ jsxs(Dialog.Portal, { children: [/* @__PURE__ */ jsx(Dialog.Overlay, { className: "fixed inset-0 z-50 bg-black/50" }), /* @__PURE__ */ jsxs(Dialog.Content, {
|
|
35
|
+
...description ? {} : { "aria-describedby": void 0 },
|
|
36
|
+
className: "fixed left-1/2 top-1/2 z-50 max-h-[min(680px,calc(100vh-2rem))] w-full max-w-lg -translate-x-1/2 -translate-y-1/2 overflow-y-auto rounded-lt border border-lt-border bg-lt-bg p-6 shadow-lg",
|
|
42
37
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
43
38
|
className: "flex items-start justify-between gap-4",
|
|
44
39
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
45
40
|
className: "grid gap-2",
|
|
46
|
-
children: [/* @__PURE__ */ jsx(
|
|
41
|
+
children: [/* @__PURE__ */ jsx(Dialog.Title, {
|
|
47
42
|
className: "text-lg font-semibold leading-none tracking-tight",
|
|
48
|
-
id: titleId,
|
|
49
43
|
children: title
|
|
50
|
-
}), description && /* @__PURE__ */ jsx(
|
|
44
|
+
}), description && /* @__PURE__ */ jsx(Dialog.Description, {
|
|
51
45
|
className: "text-sm text-lt-muted-fg",
|
|
52
|
-
id: descriptionId,
|
|
53
46
|
children: description
|
|
54
47
|
})]
|
|
55
|
-
}), /* @__PURE__ */ jsx(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
48
|
+
}), /* @__PURE__ */ jsx(Dialog.Close, {
|
|
49
|
+
asChild: true,
|
|
50
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
51
|
+
"aria-label": closeLabel,
|
|
52
|
+
size: "icon",
|
|
53
|
+
variant: "ghost",
|
|
54
|
+
children: /* @__PURE__ */ jsx(Icon, {
|
|
55
|
+
name: "x",
|
|
56
|
+
"aria-hidden": "true",
|
|
57
|
+
className: "size-lt-icon-md"
|
|
58
|
+
})
|
|
63
59
|
})
|
|
64
60
|
})]
|
|
65
61
|
}), /* @__PURE__ */ jsx("div", {
|
|
66
62
|
className: "mt-6 space-y-6",
|
|
67
63
|
children
|
|
68
64
|
})]
|
|
69
|
-
})
|
|
65
|
+
})] })
|
|
70
66
|
});
|
|
71
67
|
};
|
|
72
68
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modal.js","names":[],"sources":["../../../resources/js/core/components/modal.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"modal.js","names":[],"sources":["../../../resources/js/core/components/modal.tsx"],"sourcesContent":["import { Icon } from \"@lattice/lattice/icons\";\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { useEffect, useState } from \"react\";\nimport { Button } from \"@lattice/lattice/core/components/button\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { LATTICE_EVENT } from \"@lattice/lattice/events/event-names\";\n\ntype ModalEvent = CustomEvent<{\n modal: string | null;\n}>;\n\nfunction matchesModal(event: Event, modal: string): boolean {\n const target = (event as ModalEvent).detail?.modal;\n\n return target == null || target === modal;\n}\n\nconst ModalComponent: RendererComponent<\"modal\"> = ({ children, node }) => {\n const title = node.props.title ?? \"Dialog\";\n const description = node.props.description;\n const closeLabel = node.props.closeLabel;\n const [isOpen, setIsOpen] = useState(node.props.open === true);\n\n useEffect(() => {\n function open(event: Event): void {\n if (node.id && matchesModal(event, node.id)) {\n setIsOpen(true);\n }\n }\n\n function close(event: Event): void {\n if (!node.id || matchesModal(event, node.id)) {\n setIsOpen(false);\n }\n }\n\n window.addEventListener(LATTICE_EVENT.openModal, open);\n window.addEventListener(LATTICE_EVENT.closeModal, close);\n\n return () => {\n window.removeEventListener(LATTICE_EVENT.openModal, open);\n window.removeEventListener(LATTICE_EVENT.closeModal, close);\n };\n }, [node.id]);\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={setIsOpen}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50\" />\n <Dialog.Content\n {...(description ? {} : { \"aria-describedby\": undefined })}\n className=\"fixed left-1/2 top-1/2 z-50 max-h-[min(680px,calc(100vh-2rem))] w-full max-w-lg -translate-x-1/2 -translate-y-1/2 overflow-y-auto rounded-lt border border-lt-border bg-lt-bg p-6 shadow-lg\"\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"grid gap-2\">\n <Dialog.Title className=\"text-lg font-semibold leading-none tracking-tight\">\n {title}\n </Dialog.Title>\n\n {description && (\n <Dialog.Description className=\"text-sm text-lt-muted-fg\">\n {description}\n </Dialog.Description>\n )}\n </div>\n\n <Dialog.Close asChild>\n <Button aria-label={closeLabel} size=\"icon\" variant=\"ghost\">\n <Icon name=\"x\" aria-hidden=\"true\" className=\"size-lt-icon-md\" />\n </Button>\n </Dialog.Close>\n </div>\n\n <div className=\"mt-6 space-y-6\">{children}</div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n\nexport default ModalComponent;\n"],"mappings":";;;;;;;AAWA,SAAS,aAAa,OAAc,OAAwB;CAC1D,MAAM,SAAU,MAAqB,QAAQ;CAE7C,OAAO,UAAU,QAAQ,WAAW;AACtC;AAEA,IAAM,kBAA8C,EAAE,UAAU,WAAW;CACzE,MAAM,QAAQ,KAAK,MAAM,SAAS;CAClC,MAAM,cAAc,KAAK,MAAM;CAC/B,MAAM,aAAa,KAAK,MAAM;CAC9B,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK,MAAM,SAAS,IAAI;CAE7D,gBAAgB;EACd,SAAS,KAAK,OAAoB;GAChC,IAAI,KAAK,MAAM,aAAa,OAAO,KAAK,EAAE,GACxC,UAAU,IAAI;EAElB;EAEA,SAAS,MAAM,OAAoB;GACjC,IAAI,CAAC,KAAK,MAAM,aAAa,OAAO,KAAK,EAAE,GACzC,UAAU,KAAK;EAEnB;EAEA,OAAO,iBAAiB,cAAc,WAAW,IAAI;EACrD,OAAO,iBAAiB,cAAc,YAAY,KAAK;EAEvD,aAAa;GACX,OAAO,oBAAoB,cAAc,WAAW,IAAI;GACxD,OAAO,oBAAoB,cAAc,YAAY,KAAK;EAC5D;CACF,GAAG,CAAC,KAAK,EAAE,CAAC;CAEZ,OACE,oBAAC,OAAO,MAAR;EAAa,MAAM;EAAQ,cAAc;YACvC,qBAAC,OAAO,QAAR,EAAA,UAAA,CACE,oBAAC,OAAO,SAAR,EAAgB,WAAU,iCAAkC,CAAA,GAC5D,qBAAC,OAAO,SAAR;GACE,GAAK,cAAc,CAAC,IAAI,EAAE,oBAAoB,KAAA,EAAU;GACxD,WAAU;aAFZ,CAIE,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,OAAO,OAAR;MAAc,WAAU;gBACrB;KACW,CAAA,GAEb,eACC,oBAAC,OAAO,aAAR;MAAoB,WAAU;gBAC3B;KACiB,CAAA,CAEnB;QAEL,oBAAC,OAAO,OAAR;KAAc,SAAA;eACZ,oBAAC,QAAD;MAAQ,cAAY;MAAY,MAAK;MAAO,SAAQ;gBAClD,oBAAC,MAAD;OAAM,MAAK;OAAI,eAAY;OAAO,WAAU;MAAmB,CAAA;KACzD,CAAA;IACI,CAAA,CACX;OAEL,oBAAC,OAAD;IAAK,WAAU;IAAkB;GAAc,CAAA,CACjC;IACH,EAAA,CAAA;CACJ,CAAA;AAEjB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { cn } from "../../lib/utils.js";
|
|
2
|
+
import { Icon } from "../../icons/sprite.js";
|
|
3
|
+
import { Renderer, useRendererContext } from "../renderer.js";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
//#region resources/js/core/components/section.tsx
|
|
7
|
+
function readStored(key, remember, fallback) {
|
|
8
|
+
if (!remember || typeof window === "undefined") return fallback;
|
|
9
|
+
const stored = window.localStorage.getItem(key);
|
|
10
|
+
return stored === null ? fallback : stored === "true";
|
|
11
|
+
}
|
|
12
|
+
function getNodes(value) {
|
|
13
|
+
if (!Array.isArray(value)) return [];
|
|
14
|
+
return value.filter((node) => typeof node === "object" && node !== null && "type" in node && typeof node.type === "string");
|
|
15
|
+
}
|
|
16
|
+
var SectionComponent = ({ children, node }) => {
|
|
17
|
+
const { title, description } = node.props;
|
|
18
|
+
const collapsible = node.props.collapsible === true;
|
|
19
|
+
const rememberState = node.props.rememberState !== false;
|
|
20
|
+
const headerActions = getNodes(node.props.headerActions);
|
|
21
|
+
const { fallback, missingComponent, registry } = useRendererContext();
|
|
22
|
+
const storageKey = `lattice:section:${node.id ?? "default"}`;
|
|
23
|
+
const [collapsed, setCollapsed] = useState(() => readStored(storageKey, collapsible && rememberState, node.props.collapsed === true));
|
|
24
|
+
function toggle() {
|
|
25
|
+
setCollapsed((value) => {
|
|
26
|
+
const next = !value;
|
|
27
|
+
if (rememberState && typeof window !== "undefined") window.localStorage.setItem(storageKey, String(next));
|
|
28
|
+
return next;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const isCollapsed = collapsible && collapsed;
|
|
32
|
+
const hasHeader = Boolean(title || description || headerActions.length > 0 || collapsible);
|
|
33
|
+
return /* @__PURE__ */ jsxs("section", {
|
|
34
|
+
className: "flex flex-col gap-6 rounded-lt border border-lt-border bg-lt-surface py-6 text-lt-surface-fg shadow-xs",
|
|
35
|
+
"data-lattice-component": node.id,
|
|
36
|
+
children: [hasHeader && /* @__PURE__ */ jsxs("div", {
|
|
37
|
+
className: "flex items-start justify-between gap-4 px-6",
|
|
38
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
39
|
+
className: "flex min-w-0 items-start gap-2",
|
|
40
|
+
children: [collapsible && /* @__PURE__ */ jsx("button", {
|
|
41
|
+
"aria-expanded": !isCollapsed,
|
|
42
|
+
"aria-label": isCollapsed ? "Expand section" : "Collapse section",
|
|
43
|
+
"data-test": `section-toggle-${node.id ?? "default"}`,
|
|
44
|
+
className: "mt-0.5 inline-flex shrink-0 items-center rounded-md p-0.5 text-lt-muted-fg transition-colors hover:bg-lt-muted hover:text-lt-fg",
|
|
45
|
+
onClick: toggle,
|
|
46
|
+
type: "button",
|
|
47
|
+
children: /* @__PURE__ */ jsx(Icon, {
|
|
48
|
+
name: "chevron-down",
|
|
49
|
+
className: cn("size-lt-icon-md transition-transform", isCollapsed && "-rotate-90")
|
|
50
|
+
})
|
|
51
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
52
|
+
className: "flex min-w-0 flex-col gap-1.5",
|
|
53
|
+
children: [title && /* @__PURE__ */ jsx("div", {
|
|
54
|
+
className: "font-semibold leading-none",
|
|
55
|
+
children: title
|
|
56
|
+
}), description && /* @__PURE__ */ jsx("div", {
|
|
57
|
+
className: "text-sm text-lt-muted-fg",
|
|
58
|
+
children: description
|
|
59
|
+
})]
|
|
60
|
+
})]
|
|
61
|
+
}), headerActions.length > 0 && /* @__PURE__ */ jsx("div", {
|
|
62
|
+
className: "flex shrink-0 items-center gap-2",
|
|
63
|
+
children: /* @__PURE__ */ jsx(Renderer, {
|
|
64
|
+
fallback,
|
|
65
|
+
missingComponent,
|
|
66
|
+
nodes: headerActions,
|
|
67
|
+
registry
|
|
68
|
+
})
|
|
69
|
+
})]
|
|
70
|
+
}), !isCollapsed && children && /* @__PURE__ */ jsx("div", {
|
|
71
|
+
className: "flex flex-col gap-6 px-6",
|
|
72
|
+
children
|
|
73
|
+
})]
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
//#endregion
|
|
77
|
+
export { SectionComponent as default };
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section.js","names":[],"sources":["../../../resources/js/core/components/section.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Icon } from \"@lattice/lattice/icons\";\nimport { Renderer, useRendererContext } from \"@lattice/lattice/core/renderer\";\nimport type { Node, RendererComponent } from \"@lattice/lattice/core/types\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\nfunction readStored(key: string, remember: boolean, fallback: boolean): boolean {\n if (!remember || typeof window === \"undefined\") {\n return fallback;\n }\n\n const stored = window.localStorage.getItem(key);\n\n return stored === null ? fallback : stored === \"true\";\n}\n\nfunction getNodes(value: unknown): Node[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value.filter(\n (node): node is Node =>\n typeof node === \"object\" && node !== null && \"type\" in node && typeof node.type === \"string\",\n );\n}\n\nconst SectionComponent: RendererComponent<\"section\"> = ({ children, node }) => {\n const { title, description } = node.props;\n const collapsible = node.props.collapsible === true;\n const rememberState = node.props.rememberState !== false;\n const headerActions = getNodes(node.props.headerActions);\n const { fallback, missingComponent, registry } = useRendererContext();\n const storageKey = `lattice:section:${node.id ?? \"default\"}`;\n\n const [collapsed, setCollapsed] = useState(() =>\n readStored(storageKey, collapsible && rememberState, node.props.collapsed === true),\n );\n\n function toggle(): void {\n setCollapsed((value) => {\n const next = !value;\n\n if (rememberState && typeof window !== \"undefined\") {\n window.localStorage.setItem(storageKey, String(next));\n }\n\n return next;\n });\n }\n\n const isCollapsed = collapsible && collapsed;\n const hasHeader = Boolean(title || description || headerActions.length > 0 || collapsible);\n\n return (\n <section\n className=\"flex flex-col gap-6 rounded-lt border border-lt-border bg-lt-surface py-6 text-lt-surface-fg shadow-xs\"\n data-lattice-component={node.id}\n >\n {hasHeader && (\n <div className=\"flex items-start justify-between gap-4 px-6\">\n <div className=\"flex min-w-0 items-start gap-2\">\n {collapsible && (\n <button\n aria-expanded={!isCollapsed}\n aria-label={isCollapsed ? \"Expand section\" : \"Collapse section\"}\n data-test={`section-toggle-${node.id ?? \"default\"}`}\n className=\"mt-0.5 inline-flex shrink-0 items-center rounded-md p-0.5 text-lt-muted-fg transition-colors hover:bg-lt-muted hover:text-lt-fg\"\n onClick={toggle}\n type=\"button\"\n >\n <Icon\n name=\"chevron-down\"\n className={cn(\n \"size-lt-icon-md transition-transform\",\n isCollapsed && \"-rotate-90\",\n )}\n />\n </button>\n )}\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n {title && <div className=\"font-semibold leading-none\">{title}</div>}\n {description && <div className=\"text-sm text-lt-muted-fg\">{description}</div>}\n </div>\n </div>\n\n {headerActions.length > 0 && (\n <div className=\"flex shrink-0 items-center gap-2\">\n <Renderer\n fallback={fallback}\n missingComponent={missingComponent}\n nodes={headerActions}\n registry={registry}\n />\n </div>\n )}\n </div>\n )}\n\n {!isCollapsed && children && <div className=\"flex flex-col gap-6 px-6\">{children}</div>}\n </section>\n );\n};\n\nexport default SectionComponent;\n"],"mappings":";;;;;;AAMA,SAAS,WAAW,KAAa,UAAmB,UAA4B;CAC9E,IAAI,CAAC,YAAY,OAAO,WAAW,aACjC,OAAO;CAGT,MAAM,SAAS,OAAO,aAAa,QAAQ,GAAG;CAE9C,OAAO,WAAW,OAAO,WAAW,WAAW;AACjD;AAEA,SAAS,SAAS,OAAwB;CACxC,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB,OAAO,CAAC;CAGV,OAAO,MAAM,QACV,SACC,OAAO,SAAS,YAAY,SAAS,QAAQ,UAAU,QAAQ,OAAO,KAAK,SAAS,QACxF;AACF;AAEA,IAAM,oBAAkD,EAAE,UAAU,WAAW;CAC7E,MAAM,EAAE,OAAO,gBAAgB,KAAK;CACpC,MAAM,cAAc,KAAK,MAAM,gBAAgB;CAC/C,MAAM,gBAAgB,KAAK,MAAM,kBAAkB;CACnD,MAAM,gBAAgB,SAAS,KAAK,MAAM,aAAa;CACvD,MAAM,EAAE,UAAU,kBAAkB,aAAa,mBAAmB;CACpE,MAAM,aAAa,mBAAmB,KAAK,MAAM;CAEjD,MAAM,CAAC,WAAW,gBAAgB,eAChC,WAAW,YAAY,eAAe,eAAe,KAAK,MAAM,cAAc,IAAI,CACpF;CAEA,SAAS,SAAe;EACtB,cAAc,UAAU;GACtB,MAAM,OAAO,CAAC;GAEd,IAAI,iBAAiB,OAAO,WAAW,aACrC,OAAO,aAAa,QAAQ,YAAY,OAAO,IAAI,CAAC;GAGtD,OAAO;EACT,CAAC;CACH;CAEA,MAAM,cAAc,eAAe;CACnC,MAAM,YAAY,QAAQ,SAAS,eAAe,cAAc,SAAS,KAAK,WAAW;CAEzF,OACE,qBAAC,WAAD;EACE,WAAU;EACV,0BAAwB,KAAK;YAF/B,CAIG,aACC,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,qBAAC,OAAD;IAAK,WAAU;cAAf,CACG,eACC,oBAAC,UAAD;KACE,iBAAe,CAAC;KAChB,cAAY,cAAc,mBAAmB;KAC7C,aAAW,kBAAkB,KAAK,MAAM;KACxC,WAAU;KACV,SAAS;KACT,MAAK;eAEL,oBAAC,MAAD;MACE,MAAK;MACL,WAAW,GACT,wCACA,eAAe,YACjB;KACD,CAAA;IACK,CAAA,GAEV,qBAAC,OAAD;KAAK,WAAU;eAAf,CACG,SAAS,oBAAC,OAAD;MAAK,WAAU;gBAA8B;KAAW,CAAA,GACjE,eAAe,oBAAC,OAAD;MAAK,WAAU;gBAA4B;KAAiB,CAAA,CACzE;MACF;OAEJ,cAAc,SAAS,KACtB,oBAAC,OAAD;IAAK,WAAU;cACb,oBAAC,UAAD;KACY;KACQ;KAClB,OAAO;KACG;IACX,CAAA;GACE,CAAA,CAEJ;MAGN,CAAC,eAAe,YAAY,oBAAC,OAAD;GAAK,WAAU;GAA4B;EAAc,CAAA,CAC/E;;AAEb"}
|
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { RendererComponent } from '../../../../core/types';
|
|
3
|
-
declare module '../../../../core/types' {
|
|
4
|
-
interface ComponentProps {
|
|
5
|
-
"segmented-control": {
|
|
6
|
-
emits?: string;
|
|
7
|
-
label?: string;
|
|
8
|
-
name?: string;
|
|
9
|
-
options?: Option[];
|
|
10
|
-
tabIndex?: number;
|
|
11
|
-
value?: string;
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
}
|
|
1
|
+
import { RendererComponent } from '../types';
|
|
15
2
|
declare const SegmentedControlComponent: RendererComponent<"segmented-control">;
|
|
16
3
|
export default SegmentedControlComponent;
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import { getOptionalNumberProp, getOptions, getStringProp } from "../props.js";
|
|
2
1
|
import { SegmentedPills } from "./segmented-pills.js";
|
|
3
2
|
import { useState } from "react";
|
|
4
3
|
import { jsx } from "react/jsx-runtime";
|
|
5
4
|
//#region resources/js/core/components/segmented-control.tsx
|
|
6
5
|
var SegmentedControlComponent = ({ node }) => {
|
|
7
|
-
const options =
|
|
8
|
-
const
|
|
9
|
-
const emits = getStringProp(node.props, "emits");
|
|
10
|
-
const [value, setValue] = useState(getStringProp(node.props, "value") || options[0]?.value || "");
|
|
6
|
+
const { options, name, emits } = node.props;
|
|
7
|
+
const [value, setValue] = useState(node.props.value || options[0]?.value || "");
|
|
11
8
|
if (options.length === 0) return null;
|
|
12
9
|
function select(next) {
|
|
13
10
|
setValue(next);
|
|
@@ -17,10 +14,10 @@ var SegmentedControlComponent = ({ node }) => {
|
|
|
17
14
|
} }));
|
|
18
15
|
}
|
|
19
16
|
return /* @__PURE__ */ jsx(SegmentedPills, {
|
|
20
|
-
ariaLabel:
|
|
17
|
+
ariaLabel: node.props.label ?? void 0,
|
|
18
|
+
name,
|
|
21
19
|
onSelect: select,
|
|
22
20
|
options,
|
|
23
|
-
tabIndex: getOptionalNumberProp(node.props, "tabIndex"),
|
|
24
21
|
value
|
|
25
22
|
});
|
|
26
23
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segmented-control.js","names":[],"sources":["../../../resources/js/core/components/segmented-control.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport
|
|
1
|
+
{"version":3,"file":"segmented-control.js","names":[],"sources":["../../../resources/js/core/components/segmented-control.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { SegmentedPills } from \"./segmented-pills\";\n\nconst SegmentedControlComponent: RendererComponent<\"segmented-control\"> = ({ node }) => {\n const { options, name, emits } = node.props;\n const [value, setValue] = useState(node.props.value || options[0]?.value || \"\");\n\n if (options.length === 0) {\n return null;\n }\n\n function select(next: string): void {\n setValue(next);\n\n if (emits) {\n window.dispatchEvent(new CustomEvent(emits, { detail: { name, value: next } }));\n }\n }\n\n return (\n <SegmentedPills\n ariaLabel={node.props.label ?? undefined}\n name={name}\n onSelect={select}\n options={options}\n value={value}\n />\n );\n};\n\nexport default SegmentedControlComponent;\n"],"mappings":";;;;AAIA,IAAM,6BAAqE,EAAE,WAAW;CACtF,MAAM,EAAE,SAAS,MAAM,UAAU,KAAK;CACtC,MAAM,CAAC,OAAO,YAAY,SAAS,KAAK,MAAM,SAAS,QAAQ,IAAI,SAAS,EAAE;CAE9E,IAAI,QAAQ,WAAW,GACrB,OAAO;CAGT,SAAS,OAAO,MAAoB;EAClC,SAAS,IAAI;EAEb,IAAI,OACF,OAAO,cAAc,IAAI,YAAY,OAAO,EAAE,QAAQ;GAAE;GAAM,OAAO;EAAK,EAAE,CAAC,CAAC;CAElF;CAEA,OACE,oBAAC,gBAAD;EACE,WAAW,KAAK,MAAM,SAAS,KAAA;EACzB;EACN,UAAU;EACD;EACF;CACR,CAAA;AAEL"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { Option } from '
|
|
1
|
+
import { Option } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Presentational segmented pill group. Used by the form choice field (bound to a
|
|
4
4
|
* form value) and the core segmented control (standalone, emits an event).
|
|
5
5
|
*/
|
|
6
|
-
export declare function SegmentedPills({ ariaLabel, disabled, onSelect, options, tabIndex, value, }: {
|
|
6
|
+
export declare function SegmentedPills({ ariaLabel, autoFocus, disabled, name, onSelect, options, tabIndex, value, }: {
|
|
7
7
|
ariaLabel?: string;
|
|
8
|
+
autoFocus?: boolean;
|
|
8
9
|
disabled?: boolean;
|
|
10
|
+
name?: string;
|
|
9
11
|
onSelect: (value: string) => void;
|
|
10
12
|
options: Option[];
|
|
11
13
|
tabIndex?: number;
|
|
@@ -1,19 +1,28 @@
|
|
|
1
1
|
import { cn } from "../../lib/utils.js";
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
2
3
|
import { jsx } from "react/jsx-runtime";
|
|
3
4
|
//#region resources/js/core/components/segmented-pills.tsx
|
|
4
5
|
/**
|
|
5
6
|
* Presentational segmented pill group. Used by the form choice field (bound to a
|
|
6
7
|
* form value) and the core segmented control (standalone, emits an event).
|
|
7
8
|
*/
|
|
8
|
-
function SegmentedPills({ ariaLabel, disabled = false, onSelect, options, tabIndex, value }) {
|
|
9
|
+
function SegmentedPills({ ariaLabel, autoFocus = false, disabled = false, name, onSelect, options, tabIndex, value }) {
|
|
10
|
+
const groupRef = useRef(null);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
if (!autoFocus) return;
|
|
13
|
+
const group = groupRef.current;
|
|
14
|
+
(group?.querySelector("button[aria-checked=\"true\"]") ?? group?.querySelector("button"))?.focus();
|
|
15
|
+
}, [autoFocus]);
|
|
9
16
|
return /* @__PURE__ */ jsx("div", {
|
|
10
17
|
"aria-label": ariaLabel,
|
|
11
18
|
className: "inline-flex w-fit max-w-full gap-1 overflow-x-auto rounded-lt bg-lt-muted p-1",
|
|
19
|
+
ref: groupRef,
|
|
12
20
|
role: "radiogroup",
|
|
13
21
|
children: options.map((option) => {
|
|
14
22
|
const isSelected = value === option.value;
|
|
15
23
|
return /* @__PURE__ */ jsx("button", {
|
|
16
24
|
"aria-checked": isSelected,
|
|
25
|
+
"data-test": `${name ?? "segment"}-${option.value}`,
|
|
17
26
|
className: cn("whitespace-nowrap rounded-lt-sm px-3 py-1.5 text-sm font-medium transition-colors", isSelected ? "bg-lt-bg text-lt-fg shadow-xs" : "text-lt-muted-fg hover:bg-lt-bg/60 hover:text-lt-fg", disabled && "cursor-not-allowed opacity-60"),
|
|
18
27
|
disabled,
|
|
19
28
|
onClick: () => onSelect(option.value),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segmented-pills.js","names":[],"sources":["../../../resources/js/core/components/segmented-pills.tsx"],"sourcesContent":["import type { Option } from \"@lattice/lattice/core/
|
|
1
|
+
{"version":3,"file":"segmented-pills.js","names":[],"sources":["../../../resources/js/core/components/segmented-pills.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport type { Option } from \"@lattice/lattice/core/types\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\n/**\n * Presentational segmented pill group. Used by the form choice field (bound to a\n * form value) and the core segmented control (standalone, emits an event).\n */\nexport function SegmentedPills({\n ariaLabel,\n autoFocus = false,\n disabled = false,\n name,\n onSelect,\n options,\n tabIndex,\n value,\n}: {\n ariaLabel?: string;\n autoFocus?: boolean;\n disabled?: boolean;\n name?: string;\n onSelect: (value: string) => void;\n options: Option[];\n tabIndex?: number;\n value: string;\n}) {\n const groupRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!autoFocus) {\n return;\n }\n\n const group = groupRef.current;\n const target =\n group?.querySelector<HTMLButtonElement>('button[aria-checked=\"true\"]') ??\n group?.querySelector<HTMLButtonElement>(\"button\");\n\n target?.focus();\n }, [autoFocus]);\n\n return (\n <div\n aria-label={ariaLabel}\n className=\"inline-flex w-fit max-w-full gap-1 overflow-x-auto rounded-lt bg-lt-muted p-1\"\n ref={groupRef}\n role=\"radiogroup\"\n >\n {options.map((option) => {\n const isSelected = value === option.value;\n\n return (\n <button\n aria-checked={isSelected}\n data-test={`${name ?? \"segment\"}-${option.value}`}\n className={cn(\n \"whitespace-nowrap rounded-lt-sm px-3 py-1.5 text-sm font-medium transition-colors\",\n isSelected\n ? \"bg-lt-bg text-lt-fg shadow-xs\"\n : \"text-lt-muted-fg hover:bg-lt-bg/60 hover:text-lt-fg\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n disabled={disabled}\n key={option.value}\n onClick={() => onSelect(option.value)}\n role=\"radio\"\n tabIndex={tabIndex}\n type=\"button\"\n >\n {option.label}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,eAAe,EAC7B,WACA,YAAY,OACZ,WAAW,OACX,MACA,UACA,SACA,UACA,SAUC;CACD,MAAM,WAAW,OAAuB,IAAI;CAE5C,gBAAgB;EACd,IAAI,CAAC,WACH;EAGF,MAAM,QAAQ,SAAS;EAKvB,CAHE,OAAO,cAAiC,+BAA6B,KACrE,OAAO,cAAiC,QAAQ,IAE1C,MAAM;CAChB,GAAG,CAAC,SAAS,CAAC;CAEd,OACE,oBAAC,OAAD;EACE,cAAY;EACZ,WAAU;EACV,KAAK;EACL,MAAK;YAEJ,QAAQ,KAAK,WAAW;GACvB,MAAM,aAAa,UAAU,OAAO;GAEpC,OACE,oBAAC,UAAD;IACE,gBAAc;IACd,aAAW,GAAG,QAAQ,UAAU,GAAG,OAAO;IAC1C,WAAW,GACT,qFACA,aACI,kCACA,uDACJ,YAAY,+BACd;IACU;IAEV,eAAe,SAAS,OAAO,KAAK;IACpC,MAAK;IACK;IACV,MAAK;cAEJ,OAAO;GACF,GAPD,OAAO,KAON;EAEZ,CAAC;CACE,CAAA;AAET"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { cn } from "../../lib/utils.js";
|
|
2
|
+
import { Icon } from "../../icons/sprite.js";
|
|
3
|
+
import { useT } from "../../i18n/instance.js";
|
|
2
4
|
import { jsx } from "react/jsx-runtime";
|
|
3
|
-
import { Loader2Icon } from "lucide-react";
|
|
4
5
|
//#region resources/js/core/components/spinner.tsx
|
|
5
6
|
function Spinner({ className, ...props }) {
|
|
6
|
-
|
|
7
|
+
const { t } = useT("lattice");
|
|
8
|
+
return /* @__PURE__ */ jsx(Icon, {
|
|
9
|
+
name: "loader-2",
|
|
7
10
|
role: "status",
|
|
8
|
-
"aria-label": "Loading",
|
|
9
|
-
|
|
11
|
+
"aria-label": t("a11y.loading", "Loading"),
|
|
12
|
+
"aria-hidden": false,
|
|
13
|
+
className: cn("animate-spin", className),
|
|
10
14
|
...props
|
|
11
15
|
});
|
|
12
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.js","names":[],"sources":["../../../resources/js/core/components/spinner.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"spinner.js","names":[],"sources":["../../../resources/js/core/components/spinner.tsx"],"sourcesContent":["import { Icon } from \"@lattice/lattice/icons\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport { useT } from \"@lattice/lattice/i18n\";\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n const { t } = useT(\"lattice\");\n\n return (\n <Icon\n name=\"loader-2\"\n role=\"status\"\n aria-label={t(\"a11y.loading\", \"Loading\")}\n aria-hidden={false}\n className={cn(\"animate-spin\", className)}\n {...props}\n />\n );\n}\n\nexport { Spinner };\n"],"mappings":";;;;;AAIA,SAAS,QAAQ,EAAE,WAAW,GAAG,SAAsC;CACrE,MAAM,EAAE,MAAM,KAAK,SAAS;CAE5B,OACE,oBAAC,MAAD;EACE,MAAK;EACL,MAAK;EACL,cAAY,EAAE,gBAAgB,SAAS;EACvC,eAAa;EACb,WAAW,GAAG,gBAAgB,SAAS;EACvC,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
import { RendererComponent } from '
|
|
2
|
-
declare module '../../../../core/types' {
|
|
3
|
-
interface ComponentProps {
|
|
4
|
-
stack: {
|
|
5
|
-
align?: string;
|
|
6
|
-
direction?: string;
|
|
7
|
-
gap?: string;
|
|
8
|
-
width?: string;
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
}
|
|
1
|
+
import { RendererComponent } from '../types';
|
|
12
2
|
declare const StackComponent: RendererComponent<"stack">;
|
|
13
3
|
export default StackComponent;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { cn } from "../../lib/utils.js";
|
|
2
|
-
import { getStringProp } from "../props.js";
|
|
3
2
|
import { jsx } from "react/jsx-runtime";
|
|
4
3
|
//#region resources/js/core/components/stack.tsx
|
|
5
4
|
var gridAlignments = {
|
|
@@ -20,16 +19,17 @@ var stackGaps = {
|
|
|
20
19
|
xl: "gap-8"
|
|
21
20
|
};
|
|
22
21
|
var stackWidths = {
|
|
22
|
+
fill: "min-w-0 flex-1",
|
|
23
23
|
full: "w-full",
|
|
24
24
|
lg: "mx-auto w-full max-w-4xl",
|
|
25
25
|
md: "mx-auto w-full max-w-2xl",
|
|
26
26
|
sm: "mx-auto w-full max-w-md"
|
|
27
27
|
};
|
|
28
28
|
var StackComponent = ({ children, node }) => {
|
|
29
|
-
const align =
|
|
30
|
-
const direction =
|
|
31
|
-
const gap =
|
|
32
|
-
const width =
|
|
29
|
+
const align = node.props.align ?? "stretch";
|
|
30
|
+
const direction = node.props.direction ?? "column";
|
|
31
|
+
const gap = node.props.gap ?? "md";
|
|
32
|
+
const width = node.props.width ?? "full";
|
|
33
33
|
if (direction === "row") return /* @__PURE__ */ jsx("div", {
|
|
34
34
|
"data-lattice-component": node.id,
|
|
35
35
|
className: cn("flex flex-wrap", flexAlignments[align] ?? flexAlignments.stretch, stackGaps[gap] ?? stackGaps.md, stackWidths[width] ?? stackWidths.full),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack.js","names":[],"sources":["../../../resources/js/core/components/stack.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"stack.js","names":[],"sources":["../../../resources/js/core/components/stack.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\nconst gridAlignments: Record<string, string> = {\n center: \"justify-items-center text-center\",\n start: \"justify-items-start text-left\",\n stretch: \"justify-items-stretch\",\n};\n\nconst flexAlignments: Record<string, string> = {\n center: \"items-center justify-center text-center\",\n start: \"items-center justify-start text-left\",\n stretch: \"items-stretch justify-stretch\",\n};\n\nconst stackGaps: Record<string, string> = {\n xs: \"gap-1\",\n lg: \"gap-6\",\n md: \"gap-4\",\n sm: \"gap-2\",\n xl: \"gap-8\",\n};\n\nconst stackWidths: Record<string, string> = {\n fill: \"min-w-0 flex-1\",\n full: \"w-full\",\n lg: \"mx-auto w-full max-w-4xl\",\n md: \"mx-auto w-full max-w-2xl\",\n sm: \"mx-auto w-full max-w-md\",\n};\n\nconst StackComponent: RendererComponent<\"stack\"> = ({ children, node }) => {\n const align = node.props.align ?? \"stretch\";\n const direction = node.props.direction ?? \"column\";\n const gap = node.props.gap ?? \"md\";\n const width = node.props.width ?? \"full\";\n\n if (direction === \"row\") {\n return (\n <div\n data-lattice-component={node.id}\n className={cn(\n \"flex flex-wrap\",\n flexAlignments[align] ?? flexAlignments.stretch,\n stackGaps[gap] ?? stackGaps.md,\n stackWidths[width] ?? stackWidths.full,\n )}\n >\n {children}\n </div>\n );\n }\n\n return (\n <div\n data-lattice-component={node.id}\n className={cn(\n \"grid\",\n gridAlignments[align] ?? gridAlignments.stretch,\n stackGaps[gap] ?? stackGaps.md,\n stackWidths[width] ?? stackWidths.full,\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default StackComponent;\n"],"mappings":";;;AAGA,IAAM,iBAAyC;CAC7C,QAAQ;CACR,OAAO;CACP,SAAS;AACX;AAEA,IAAM,iBAAyC;CAC7C,QAAQ;CACR,OAAO;CACP,SAAS;AACX;AAEA,IAAM,YAAoC;CACxC,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAM,cAAsC;CAC1C,MAAM;CACN,MAAM;CACN,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAM,kBAA8C,EAAE,UAAU,WAAW;CACzE,MAAM,QAAQ,KAAK,MAAM,SAAS;CAClC,MAAM,YAAY,KAAK,MAAM,aAAa;CAC1C,MAAM,MAAM,KAAK,MAAM,OAAO;CAC9B,MAAM,QAAQ,KAAK,MAAM,SAAS;CAElC,IAAI,cAAc,OAChB,OACE,oBAAC,OAAD;EACE,0BAAwB,KAAK;EAC7B,WAAW,GACT,kBACA,eAAe,UAAU,eAAe,SACxC,UAAU,QAAQ,UAAU,IAC5B,YAAY,UAAU,YAAY,IACpC;EAEC;CACE,CAAA;CAIT,OACE,oBAAC,OAAD;EACE,0BAAwB,KAAK;EAC7B,WAAW,GACT,QACA,eAAe,UAAU,eAAe,SACxC,UAAU,QAAQ,UAAU,IAC5B,YAAY,UAAU,YAAY,IACpC;EAEC;CACE,CAAA;AAET"}
|