@cratis/scene.blueprint.default 4.40.0 → 4.42.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/ComponentName.ts +9 -0
- package/defaultBlueprint.ts +1 -0
- package/defaultBlueprintComponents.ts +4 -1
- package/dist/cjs/ComponentName.js +3 -0
- package/dist/cjs/ComponentName.js.map +1 -1
- package/dist/cjs/defaultBlueprint.js +20 -1
- package/dist/cjs/defaultBlueprint.js.map +1 -1
- package/dist/cjs/defaultBlueprintComponentMetadata.js +11 -0
- package/dist/cjs/defaultBlueprintComponentMetadata.js.map +1 -1
- package/dist/cjs/defaultBlueprintComponents.js +17 -0
- package/dist/cjs/defaultBlueprintComponents.js.map +1 -1
- package/dist/cjs/foundation/ActionButton.js.map +1 -1
- package/dist/cjs/foundation/ActionButtonControl.js +46 -0
- package/dist/cjs/foundation/ActionButtonControl.js.map +1 -0
- package/dist/cjs/foundation/DialogFrame.js +196 -0
- package/dist/cjs/foundation/DialogFrame.js.map +1 -0
- package/dist/cjs/foundation/FormScreenBody.js +13 -3
- package/dist/cjs/foundation/FormScreenBody.js.map +1 -1
- package/dist/cjs/foundation/Notice.js +51 -0
- package/dist/cjs/foundation/Notice.js.map +1 -0
- package/dist/cjs/foundation/formModel.js +1 -0
- package/dist/cjs/foundation/formModel.js.map +1 -1
- package/dist/cjs/foundation/foundationComponentMetadata.js +22 -0
- package/dist/cjs/foundation/foundationComponentMetadata.js.map +1 -1
- package/dist/cjs/foundation/foundationDescriptors.js +89 -0
- package/dist/cjs/foundation/foundationDescriptors.js.map +1 -1
- package/dist/cjs/foundation/foundationSamples.js +29 -0
- package/dist/cjs/foundation/foundationSamples.js.map +1 -1
- package/dist/cjs/foundation/foundationStrings.js +3 -1
- package/dist/cjs/foundation/foundationStrings.js.map +1 -1
- package/dist/cjs/foundation/templates/boardScreenTemplate.js +76 -0
- package/dist/cjs/foundation/templates/boardScreenTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/dashboardScreenTemplate.js +128 -0
- package/dist/cjs/foundation/templates/dashboardScreenTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/dialogTemplates.js +254 -0
- package/dist/cjs/foundation/templates/dialogTemplates.js.map +1 -0
- package/dist/cjs/foundation/templates/formScreenTemplate.js +71 -0
- package/dist/cjs/foundation/templates/formScreenTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/index.js +57 -0
- package/dist/cjs/foundation/templates/index.js.map +1 -0
- package/dist/cjs/foundation/templates/listScreenTemplate.js +124 -0
- package/dist/cjs/foundation/templates/listScreenTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/masterDetailScreenTemplate.js +79 -0
- package/dist/cjs/foundation/templates/masterDetailScreenTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/recordPageTemplate.js +137 -0
- package/dist/cjs/foundation/templates/recordPageTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/stateScreenTemplates.js +252 -0
- package/dist/cjs/foundation/templates/stateScreenTemplates.js.map +1 -0
- package/dist/cjs/foundation/templates/templateParts.js +38 -0
- package/dist/cjs/foundation/templates/templateParts.js.map +1 -0
- package/dist/cjs/foundation/templates/wizardScreenTemplate.js +95 -0
- package/dist/cjs/foundation/templates/wizardScreenTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/workspaceScreenTemplate.js +62 -0
- package/dist/cjs/foundation/templates/workspaceScreenTemplate.js.map +1 -0
- package/dist/cjs/gallery/GalleryDialogPreview.js +62 -0
- package/dist/cjs/gallery/GalleryDialogPreview.js.map +1 -0
- package/dist/cjs/gallery/GalleryScreenPreview.js +78 -4
- package/dist/cjs/gallery/GalleryScreenPreview.js.map +1 -1
- package/dist/cjs/gallery/applicationChrome.js +18 -1
- package/dist/cjs/gallery/applicationChrome.js.map +1 -1
- package/dist/cjs/gallery/composeScreen.js +5 -3
- package/dist/cjs/gallery/composeScreen.js.map +1 -1
- package/dist/cjs/gallery/dialogTemplates.js +41 -36
- package/dist/cjs/gallery/dialogTemplates.js.map +1 -1
- package/dist/cjs/gallery/screens.js +87 -3
- package/dist/cjs/gallery/screens.js.map +1 -1
- package/dist/cjs/index.js +61 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/ComponentName.d.ts +3 -0
- package/dist/esm/ComponentName.d.ts.map +1 -1
- package/dist/esm/ComponentName.js +3 -0
- package/dist/esm/ComponentName.js.map +1 -1
- package/dist/esm/defaultBlueprint.d.ts.map +1 -1
- package/dist/esm/defaultBlueprint.js +20 -1
- package/dist/esm/defaultBlueprint.js.map +1 -1
- package/dist/esm/defaultBlueprintComponentMetadata.js +11 -0
- package/dist/esm/defaultBlueprintComponentMetadata.js.map +1 -1
- package/dist/esm/defaultBlueprintComponents.d.ts.map +1 -1
- package/dist/esm/defaultBlueprintComponents.js +17 -0
- package/dist/esm/defaultBlueprintComponents.js.map +1 -1
- package/dist/esm/foundation/ActionButton.d.ts +1 -1
- package/dist/esm/foundation/ActionButton.d.ts.map +1 -1
- package/dist/esm/foundation/ActionButton.js.map +1 -1
- package/dist/esm/foundation/ActionButtonControl.d.ts +3 -0
- package/dist/esm/foundation/ActionButtonControl.d.ts.map +1 -0
- package/dist/esm/foundation/ActionButtonControl.js +44 -0
- package/dist/esm/foundation/ActionButtonControl.js.map +1 -0
- package/dist/esm/foundation/DialogFrame.d.ts +14 -0
- package/dist/esm/foundation/DialogFrame.d.ts.map +1 -0
- package/dist/esm/foundation/DialogFrame.js +190 -0
- package/dist/esm/foundation/DialogFrame.js.map +1 -0
- package/dist/esm/foundation/FormScreenBody.d.ts.map +1 -1
- package/dist/esm/foundation/FormScreenBody.js +13 -3
- package/dist/esm/foundation/FormScreenBody.js.map +1 -1
- package/dist/esm/foundation/Notice.d.ts +3 -0
- package/dist/esm/foundation/Notice.d.ts.map +1 -0
- package/dist/esm/foundation/Notice.js +49 -0
- package/dist/esm/foundation/Notice.js.map +1 -0
- package/dist/esm/foundation/formModel.d.ts +2 -1
- package/dist/esm/foundation/formModel.d.ts.map +1 -1
- package/dist/esm/foundation/formModel.js +1 -0
- package/dist/esm/foundation/formModel.js.map +1 -1
- package/dist/esm/foundation/foundationComponentMetadata.d.ts.map +1 -1
- package/dist/esm/foundation/foundationComponentMetadata.js +22 -0
- package/dist/esm/foundation/foundationComponentMetadata.js.map +1 -1
- package/dist/esm/foundation/foundationDescriptors.d.ts.map +1 -1
- package/dist/esm/foundation/foundationDescriptors.js +89 -0
- package/dist/esm/foundation/foundationDescriptors.js.map +1 -1
- package/dist/esm/foundation/foundationSamples.d.ts.map +1 -1
- package/dist/esm/foundation/foundationSamples.js +29 -0
- package/dist/esm/foundation/foundationSamples.js.map +1 -1
- package/dist/esm/foundation/foundationStrings.d.ts +2 -0
- package/dist/esm/foundation/foundationStrings.d.ts.map +1 -1
- package/dist/esm/foundation/foundationStrings.js +3 -1
- package/dist/esm/foundation/foundationStrings.js.map +1 -1
- package/dist/esm/foundation/index.d.ts +4 -0
- package/dist/esm/foundation/index.d.ts.map +1 -1
- package/dist/esm/foundation/index.js +4 -0
- package/dist/esm/foundation/index.js.map +1 -1
- package/dist/esm/foundation/templates/boardScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/boardScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/boardScreenTemplate.js +74 -0
- package/dist/esm/foundation/templates/boardScreenTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/dashboardScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/dashboardScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/dashboardScreenTemplate.js +126 -0
- package/dist/esm/foundation/templates/dashboardScreenTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/dialogTemplates.d.ts +20 -0
- package/dist/esm/foundation/templates/dialogTemplates.d.ts.map +1 -0
- package/dist/esm/foundation/templates/dialogTemplates.js +243 -0
- package/dist/esm/foundation/templates/dialogTemplates.js.map +1 -0
- package/dist/esm/foundation/templates/formScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/formScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/formScreenTemplate.js +69 -0
- package/dist/esm/foundation/templates/formScreenTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/index.d.ts +13 -0
- package/dist/esm/foundation/templates/index.d.ts.map +1 -0
- package/dist/esm/foundation/templates/index.js +27 -0
- package/dist/esm/foundation/templates/index.js.map +1 -0
- package/dist/esm/foundation/templates/listScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/listScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/listScreenTemplate.js +122 -0
- package/dist/esm/foundation/templates/listScreenTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/masterDetailScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/masterDetailScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/masterDetailScreenTemplate.js +77 -0
- package/dist/esm/foundation/templates/masterDetailScreenTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/recordPageTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/recordPageTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/recordPageTemplate.js +135 -0
- package/dist/esm/foundation/templates/recordPageTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/stateScreenTemplates.d.ts +8 -0
- package/dist/esm/foundation/templates/stateScreenTemplates.d.ts.map +1 -0
- package/dist/esm/foundation/templates/stateScreenTemplates.js +245 -0
- package/dist/esm/foundation/templates/stateScreenTemplates.js.map +1 -0
- package/dist/esm/foundation/templates/templateParts.d.ts +6 -0
- package/dist/esm/foundation/templates/templateParts.d.ts.map +1 -0
- package/dist/esm/foundation/templates/templateParts.js +33 -0
- package/dist/esm/foundation/templates/templateParts.js.map +1 -0
- package/dist/esm/foundation/templates/wizardScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/wizardScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/wizardScreenTemplate.js +93 -0
- package/dist/esm/foundation/templates/wizardScreenTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/workspaceScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/workspaceScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/workspaceScreenTemplate.js +60 -0
- package/dist/esm/foundation/templates/workspaceScreenTemplate.js.map +1 -0
- package/dist/esm/gallery/FoundationDialogs.stories.d.ts +35 -0
- package/dist/esm/gallery/FoundationDialogs.stories.d.ts.map +1 -0
- package/dist/esm/gallery/FoundationDialogs.stories.js +38 -0
- package/dist/esm/gallery/FoundationDialogs.stories.js.map +1 -0
- package/dist/esm/gallery/GalleryDialogPreview.d.ts +17 -0
- package/dist/esm/gallery/GalleryDialogPreview.d.ts.map +1 -0
- package/dist/esm/gallery/GalleryDialogPreview.js +59 -0
- package/dist/esm/gallery/GalleryDialogPreview.js.map +1 -0
- package/dist/esm/gallery/GalleryScreenPreview.d.ts +13 -2
- package/dist/esm/gallery/GalleryScreenPreview.d.ts.map +1 -1
- package/dist/esm/gallery/GalleryScreenPreview.js +77 -5
- package/dist/esm/gallery/GalleryScreenPreview.js.map +1 -1
- package/dist/esm/gallery/applicationChrome.d.ts.map +1 -1
- package/dist/esm/gallery/applicationChrome.js +18 -1
- package/dist/esm/gallery/applicationChrome.js.map +1 -1
- package/dist/esm/gallery/composeScreen.d.ts.map +1 -1
- package/dist/esm/gallery/composeScreen.js +5 -3
- package/dist/esm/gallery/composeScreen.js.map +1 -1
- package/dist/esm/gallery/dialogTemplates.d.ts.map +1 -1
- package/dist/esm/gallery/dialogTemplates.js +42 -37
- package/dist/esm/gallery/dialogTemplates.js.map +1 -1
- package/dist/esm/gallery/index.d.ts +1 -0
- package/dist/esm/gallery/index.d.ts.map +1 -1
- package/dist/esm/gallery/index.js +1 -0
- package/dist/esm/gallery/index.js.map +1 -1
- package/dist/esm/gallery/screens.d.ts.map +1 -1
- package/dist/esm/gallery/screens.js +87 -3
- package/dist/esm/gallery/screens.js.map +1 -1
- package/dist/esm/index.js +17 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/foundation/ActionButton.tsx +1 -1
- package/foundation/ActionButtonControl.tsx +37 -0
- package/foundation/DialogFrame.tsx +138 -0
- package/foundation/FormScreenBody.tsx +6 -3
- package/foundation/Notice.tsx +33 -0
- package/foundation/formModel.ts +1 -0
- package/foundation/foundationComponentMetadata.ts +3 -0
- package/foundation/foundationDescriptors.ts +41 -0
- package/foundation/foundationSamples.ts +3 -0
- package/foundation/foundationStrings.ts +2 -0
- package/foundation/index.ts +4 -0
- package/foundation/templates/boardScreenTemplate.ts +28 -0
- package/foundation/templates/dashboardScreenTemplate.ts +37 -0
- package/foundation/templates/dialogTemplates.ts +114 -0
- package/foundation/templates/formScreenTemplate.ts +28 -0
- package/foundation/templates/index.ts +28 -0
- package/foundation/templates/listScreenTemplate.ts +37 -0
- package/foundation/templates/masterDetailScreenTemplate.ts +28 -0
- package/foundation/templates/recordPageTemplate.ts +36 -0
- package/foundation/templates/stateScreenTemplates.ts +107 -0
- package/foundation/templates/templateParts.ts +30 -0
- package/foundation/templates/wizardScreenTemplate.ts +33 -0
- package/foundation/templates/workspaceScreenTemplate.ts +27 -0
- package/gallery/FoundationDialogs.stories.tsx +74 -0
- package/gallery/GalleryDialogPreview.tsx +68 -0
- package/gallery/GalleryScreenPreview.tsx +64 -5
- package/gallery/applicationChrome.ts +6 -1
- package/gallery/composeScreen.ts +4 -2
- package/gallery/dialogTemplates.ts +22 -17
- package/gallery/index.ts +1 -0
- package/gallery/screens.ts +18 -2
- package/package.json +10 -8
- package/sampleData/foundation-en.json +661 -0
- package/shell/layout.css +219 -0
- package/thumbnails/BoardScreen.svg +15 -0
- package/thumbnails/ConfirmDialog.svg +12 -0
- package/thumbnails/DashboardScreen.svg +18 -0
- package/thumbnails/DetailDialog.svg +11 -0
- package/thumbnails/ErrorScreen.svg +11 -0
- package/thumbnails/FilterDialog.svg +16 -0
- package/thumbnails/ForbiddenScreen.svg +10 -0
- package/thumbnails/FormDialog.svg +12 -0
- package/thumbnails/FormScreen.svg +14 -0
- package/thumbnails/ListScreen.svg +16 -0
- package/thumbnails/LoginScreen.svg +12 -0
- package/thumbnails/LookupDialog.svg +13 -0
- package/thumbnails/MasterDetailScreen.svg +22 -0
- package/thumbnails/NotFoundScreen.svg +9 -0
- package/thumbnails/QuickCreateDialog.svg +12 -0
- package/thumbnails/RecordPage.svg +17 -0
- package/thumbnails/SideSheet.svg +13 -0
- package/thumbnails/WizardScreen.svg +16 -0
- package/thumbnails/WorkspaceScreen.svg +12 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultBlueprintComponents.js","sources":["../../defaultBlueprintComponents.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ComponentRegistry, componentRegistryKey } from '@cratis/scene.react';\nimport { ComponentName } from './ComponentName';\nimport { defaultBlueprintName } from './packageName';\nimport { BulkBar, DataList, FormScreenBody, GlobalSearch, KanbanBoard, NotificationsButton, SubNavigation, TabSet, WizardProgress, ActivityFeed, ApprovalChainStepper, AvatarStack, ChartWrapper, ChecklistSection, ColumnChooser, FileUploader, EmptyState, FilterBuilder, OrgTree, PermissionMatrix, SavedViewsMenu, StatCard, StatusChip, TrendChip } from './foundation';\nimport {\n AppShell,\n Breadcrumb,\n ConfigPanel,\n Footer,\n FullPageShell,\n LayoutModeSwitcher,\n Logo,\n Mask,\n Menu,\n MenuItem,\n PageHeader,\n RightPanel,\n Sidebar,\n ThemeSwitcher,\n Topbar,\n UserMenu,\n} from './shell';\n\n/**\n * The components this package registers, keyed the way the renderer looks them up.\n *\n * Every key is built with `componentRegistryKey` rather than written out, because the separator between\n * package and component name is the registry's own business - it is deliberately not the `.` a screen uses\n * to qualify a name, so that a package name containing dots stays unambiguous. Building a key by hand is\n * how a component ends up registered under something no lookup will ever produce.\n */\nexport const defaultBlueprintComponents: ComponentRegistry = {\n [componentRegistryKey(defaultBlueprintName, ComponentName.AppShell)]: AppShell,\n [componentRegistryKey(defaultBlueprintName, ComponentName.FullPageShell)]: FullPageShell,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Topbar)]: Topbar,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Sidebar)]: Sidebar,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Menu)]: Menu,\n [componentRegistryKey(defaultBlueprintName, ComponentName.MenuItem)]: MenuItem,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Breadcrumb)]: Breadcrumb,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Footer)]: Footer,\n [componentRegistryKey(defaultBlueprintName, ComponentName.RightPanel)]: RightPanel,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ConfigPanel)]: ConfigPanel,\n [componentRegistryKey(defaultBlueprintName, ComponentName.PageHeader)]: PageHeader,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Mask)]: Mask,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Logo)]: Logo,\n [componentRegistryKey(defaultBlueprintName, ComponentName.UserMenu)]: UserMenu,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ThemeSwitcher)]: ThemeSwitcher,\n [componentRegistryKey(defaultBlueprintName, ComponentName.LayoutModeSwitcher)]: LayoutModeSwitcher,\n [componentRegistryKey(defaultBlueprintName, ComponentName.EmptyState)]: EmptyState,\n [componentRegistryKey(defaultBlueprintName, ComponentName.StatCard)]: StatCard,\n [componentRegistryKey(defaultBlueprintName, ComponentName.TrendChip)]: TrendChip,\n [componentRegistryKey(defaultBlueprintName, ComponentName.StatusChip)]: StatusChip,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ChartWrapper)]: ChartWrapper,\n [componentRegistryKey(defaultBlueprintName, ComponentName.FilterBuilder)]: FilterBuilder,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ColumnChooser)]: ColumnChooser,\n [componentRegistryKey(defaultBlueprintName, ComponentName.SavedViewsMenu)]: SavedViewsMenu,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ChecklistSection)]: ChecklistSection,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ActivityFeed)]: ActivityFeed,\n [componentRegistryKey(defaultBlueprintName, ComponentName.AvatarStack)]: AvatarStack,\n [componentRegistryKey(defaultBlueprintName, ComponentName.FileUploader)]: FileUploader,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ApprovalChainStepper)]: ApprovalChainStepper,\n [componentRegistryKey(defaultBlueprintName, ComponentName.OrgTree)]: OrgTree,\n [componentRegistryKey(defaultBlueprintName, ComponentName.PermissionMatrix)]: PermissionMatrix,\n [componentRegistryKey(defaultBlueprintName, ComponentName.DataList)]: DataList,\n [componentRegistryKey(defaultBlueprintName, ComponentName.TabSet)]: TabSet,\n [componentRegistryKey(defaultBlueprintName, ComponentName.SubNavigation)]: SubNavigation,\n [componentRegistryKey(defaultBlueprintName, ComponentName.BulkBar)]: BulkBar,\n [componentRegistryKey(defaultBlueprintName, ComponentName.GlobalSearch)]: GlobalSearch,\n [componentRegistryKey(defaultBlueprintName, ComponentName.NotificationsButton)]: NotificationsButton,\n [componentRegistryKey(defaultBlueprintName, ComponentName.KanbanBoard)]: KanbanBoard,\n [componentRegistryKey(defaultBlueprintName, ComponentName.WizardProgress)]: WizardProgress,\n [componentRegistryKey(defaultBlueprintName, ComponentName.FormScreenBody)]: FormScreenBody,\n};\n"],"names":["defaultBlueprintComponents","componentRegistryKey","defaultBlueprintName","ComponentName","AppShell","FullPageShell","Topbar","Sidebar","Menu","MenuItem","Breadcrumb","Footer","RightPanel","ConfigPanel","PageHeader","Mask","Logo","UserMenu","ThemeSwitcher","LayoutModeSwitcher","EmptyState","StatCard","TrendChip","StatusChip","ChartWrapper","FilterBuilder","ColumnChooser","SavedViewsMenu","ChecklistSection","ActivityFeed","AvatarStack","FileUploader","ApprovalChainStepper","OrgTree","PermissionMatrix","DataList","TabSet","SubNavigation","BulkBar","GlobalSearch","NotificationsButton","KanbanBoard","WizardProgress","FormScreenBody"],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaultBlueprintComponents.js","sources":["../../defaultBlueprintComponents.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ComponentRegistry, componentRegistryKey } from '@cratis/scene.react';\nimport { ComponentName } from './ComponentName';\nimport { defaultBlueprintName } from './packageName';\nimport { ActionButtonControl, DialogFrame, Notice, BulkBar, DataList, FormScreenBody, GlobalSearch, KanbanBoard, NotificationsButton, SubNavigation, TabSet, WizardProgress, ActivityFeed, ApprovalChainStepper, AvatarStack, ChartWrapper, ChecklistSection, ColumnChooser, FileUploader, EmptyState, FilterBuilder, OrgTree, PermissionMatrix, SavedViewsMenu, StatCard, StatusChip, TrendChip } from './foundation';\nimport {\n AppShell,\n Breadcrumb,\n ConfigPanel,\n Footer,\n FullPageShell,\n LayoutModeSwitcher,\n Logo,\n Mask,\n Menu,\n MenuItem,\n PageHeader,\n RightPanel,\n Sidebar,\n ThemeSwitcher,\n Topbar,\n UserMenu,\n} from './shell';\n\n/**\n * The components this package registers, keyed the way the renderer looks them up.\n *\n * Every key is built with `componentRegistryKey` rather than written out, because the separator between\n * package and component name is the registry's own business - it is deliberately not the `.` a screen uses\n * to qualify a name, so that a package name containing dots stays unambiguous. Building a key by hand is\n * how a component ends up registered under something no lookup will ever produce.\n */\nexport const defaultBlueprintComponents: ComponentRegistry = {\n [componentRegistryKey(defaultBlueprintName, ComponentName.AppShell)]: AppShell,\n [componentRegistryKey(defaultBlueprintName, ComponentName.FullPageShell)]: FullPageShell,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Topbar)]: Topbar,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Sidebar)]: Sidebar,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Menu)]: Menu,\n [componentRegistryKey(defaultBlueprintName, ComponentName.MenuItem)]: MenuItem,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Breadcrumb)]: Breadcrumb,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Footer)]: Footer,\n [componentRegistryKey(defaultBlueprintName, ComponentName.RightPanel)]: RightPanel,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ConfigPanel)]: ConfigPanel,\n [componentRegistryKey(defaultBlueprintName, ComponentName.PageHeader)]: PageHeader,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Mask)]: Mask,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Logo)]: Logo,\n [componentRegistryKey(defaultBlueprintName, ComponentName.UserMenu)]: UserMenu,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ThemeSwitcher)]: ThemeSwitcher,\n [componentRegistryKey(defaultBlueprintName, ComponentName.LayoutModeSwitcher)]: LayoutModeSwitcher,\n [componentRegistryKey(defaultBlueprintName, ComponentName.EmptyState)]: EmptyState,\n [componentRegistryKey(defaultBlueprintName, ComponentName.StatCard)]: StatCard,\n [componentRegistryKey(defaultBlueprintName, ComponentName.TrendChip)]: TrendChip,\n [componentRegistryKey(defaultBlueprintName, ComponentName.StatusChip)]: StatusChip,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ChartWrapper)]: ChartWrapper,\n [componentRegistryKey(defaultBlueprintName, ComponentName.FilterBuilder)]: FilterBuilder,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ColumnChooser)]: ColumnChooser,\n [componentRegistryKey(defaultBlueprintName, ComponentName.SavedViewsMenu)]: SavedViewsMenu,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ChecklistSection)]: ChecklistSection,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ActivityFeed)]: ActivityFeed,\n [componentRegistryKey(defaultBlueprintName, ComponentName.AvatarStack)]: AvatarStack,\n [componentRegistryKey(defaultBlueprintName, ComponentName.FileUploader)]: FileUploader,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ApprovalChainStepper)]: ApprovalChainStepper,\n [componentRegistryKey(defaultBlueprintName, ComponentName.OrgTree)]: OrgTree,\n [componentRegistryKey(defaultBlueprintName, ComponentName.PermissionMatrix)]: PermissionMatrix,\n [componentRegistryKey(defaultBlueprintName, ComponentName.DataList)]: DataList,\n [componentRegistryKey(defaultBlueprintName, ComponentName.TabSet)]: TabSet,\n [componentRegistryKey(defaultBlueprintName, ComponentName.SubNavigation)]: SubNavigation,\n [componentRegistryKey(defaultBlueprintName, ComponentName.DialogFrame)]: DialogFrame,\n [componentRegistryKey(defaultBlueprintName, ComponentName.ActionButton)]: ActionButtonControl,\n [componentRegistryKey(defaultBlueprintName, ComponentName.Notice)]: Notice,\n [componentRegistryKey(defaultBlueprintName, ComponentName.BulkBar)]: BulkBar,\n [componentRegistryKey(defaultBlueprintName, ComponentName.GlobalSearch)]: GlobalSearch,\n [componentRegistryKey(defaultBlueprintName, ComponentName.NotificationsButton)]: NotificationsButton,\n [componentRegistryKey(defaultBlueprintName, ComponentName.KanbanBoard)]: KanbanBoard,\n [componentRegistryKey(defaultBlueprintName, ComponentName.WizardProgress)]: WizardProgress,\n [componentRegistryKey(defaultBlueprintName, ComponentName.FormScreenBody)]: FormScreenBody,\n};\n"],"names":["defaultBlueprintComponents","componentRegistryKey","defaultBlueprintName","ComponentName","AppShell","FullPageShell","Topbar","Sidebar","Menu","MenuItem","Breadcrumb","Footer","RightPanel","ConfigPanel","PageHeader","Mask","Logo","UserMenu","ThemeSwitcher","LayoutModeSwitcher","EmptyState","StatCard","TrendChip","StatusChip","ChartWrapper","FilterBuilder","ColumnChooser","SavedViewsMenu","ChecklistSection","ActivityFeed","AvatarStack","FileUploader","ApprovalChainStepper","OrgTree","PermissionMatrix","DataList","TabSet","SubNavigation","DialogFrame","ActionButton","ActionButtonControl","Notice","BulkBar","GlobalSearch","NotificationsButton","KanbanBoard","WizardProgress","FormScreenBody"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ export interface ActionButtonProps {
|
|
|
6
6
|
onClick?: (event: {
|
|
7
7
|
stopPropagation(): void;
|
|
8
8
|
}) => void;
|
|
9
|
-
emphasis?: 'primary' | 'secondary' | 'quiet';
|
|
9
|
+
emphasis?: 'primary' | 'secondary' | 'quiet' | 'danger';
|
|
10
10
|
children: ReactNode;
|
|
11
11
|
}
|
|
12
12
|
export declare function ActionButton({ rule, disabledReason, onClick, emphasis, children }: ActionButtonProps): import("react").JSX.Element | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionButton.d.ts","sourceRoot":"","sources":["../../../foundation/ActionButton.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAE9B,IAAI,CAAC,EAAE,cAAc,CAAC;IAGtB,cAAc,EAAE,MAAM,CAAC;IAGvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,eAAe,IAAI,IAAI,CAAA;KAAE,KAAK,IAAI,CAAC;IAGvD,QAAQ,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ActionButton.d.ts","sourceRoot":"","sources":["../../../foundation/ActionButton.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAE9B,IAAI,CAAC,EAAE,cAAc,CAAC;IAGtB,cAAc,EAAE,MAAM,CAAC;IAGvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,eAAe,IAAI,IAAI,CAAA;KAAE,KAAK,IAAI,CAAC;IAGvD,QAAQ,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;IAExD,QAAQ,EAAE,SAAS,CAAC;CACvB;AAOD,wBAAgB,YAAY,CAAC,EAAE,IAA6B,EAAE,cAAc,EAAE,OAAO,EAAE,QAAoB,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAWzI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionButton.js","sources":["../../../foundation/ActionButton.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ReactNode } from 'react';\nimport { PermissionRule } from './PermissionRule';\n\nexport interface ActionButtonProps {\n /** The permission rule that decides whether the control works, refuses or is not rendered. */\n rule?: PermissionRule;\n\n /** Why the control is disabled, announced and shown as its tooltip. */\n disabledReason: string;\n\n /** What the control does when pressed. */\n onClick?: (event: { stopPropagation(): void }) => void;\n\n /** The emphasis of the button. */\n emphasis?: 'primary' | 'secondary' | 'quiet';\n\n children: ReactNode;\n}\n\n/**\n * The one button every foundation component starts an action with, so the permission rule of spec Part B 1.5 is honoured in one place:\n * hidden renders nothing; disabled stays focusable-by-description (`aria-disabled`) and carries the reason, rather than a bare\n * greyed control nobody can explain.\n */\nexport function ActionButton({ rule = PermissionRule.Enabled, disabledReason, onClick, emphasis = 'primary', children }: ActionButtonProps) {\n if (rule === PermissionRule.Hidden) return undefined;\n\n const disabled = rule === PermissionRule.Disabled;\n return (\n <button type='button' className='foundation-button' data-emphasis={emphasis} aria-disabled={disabled || undefined}\n title={disabled ? disabledReason : undefined} onClick={disabled ? undefined : onClick}>\n {children}\n {disabled && <span className='foundation-visually-hidden'>{`. ${disabledReason}`}</span>}\n </button>\n );\n}\n"],"names":["ActionButton","rule","PermissionRule","Enabled","disabledReason","onClick","emphasis","children","Hidden","undefined","disabled","Disabled","_jsxs","button","type","className","data-emphasis","aria-disabled","title","_jsx","span"],"mappings":";;;AAAA;AACA;AAqBA;;;;AAIC,IACM,SAASA,YAAAA,CAAa,EAAEC,IAAAA,GAAOC,eAAeC,OAAO,EAAEC,cAAc,EAAEC,OAAO,EAAEC,QAAAA,GAAW,SAAS,EAAEC,QAAQ,EAAqB,EAAA;AACtI,IAAA,IAAIN,IAAAA,KAASC,cAAAA,CAAeM,MAAM,EAAE,OAAOC,SAAAA;IAE3C,MAAMC,QAAAA,GAAWT,IAAAA,KAASC,cAAAA,CAAeS,QAAQ;AACjD,IAAA,qBACIC,IAAA,CAACC,QAAAA,EAAAA;QAAOC,IAAAA,EAAK,QAAA;QAASC,SAAAA,EAAU,mBAAA;QAAoBC,eAAAA,EAAeV,QAAAA;AAAUW,QAAAA,eAAAA,EAAeP,QAAAA,IAAYD,SAAAA;AACpGS,QAAAA,KAAAA,EAAOR,WAAWN,cAAAA,GAAiBK,SAAAA;AAAWJ,QAAAA,OAAAA,EAASK,WAAWD,SAAAA,GAAYJ,OAAAA;;AAC7EE,YAAAA,QAAAA;AACAG,YAAAA,QAAAA,kBAAYS,GAAA,CAACC,MAAAA,EAAAA;gBAAKL,SAAAA,EAAU,4BAAA;0BAA8B,CAAC,EAAE,EAAEX,cAAAA,CAAAA;;;;AAG5E;;"}
|
|
1
|
+
{"version":3,"file":"ActionButton.js","sources":["../../../foundation/ActionButton.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ReactNode } from 'react';\nimport { PermissionRule } from './PermissionRule';\n\nexport interface ActionButtonProps {\n /** The permission rule that decides whether the control works, refuses or is not rendered. */\n rule?: PermissionRule;\n\n /** Why the control is disabled, announced and shown as its tooltip. */\n disabledReason: string;\n\n /** What the control does when pressed. */\n onClick?: (event: { stopPropagation(): void }) => void;\n\n /** The emphasis of the button. */\n emphasis?: 'primary' | 'secondary' | 'quiet' | 'danger';\n\n children: ReactNode;\n}\n\n/**\n * The one button every foundation component starts an action with, so the permission rule of spec Part B 1.5 is honoured in one place:\n * hidden renders nothing; disabled stays focusable-by-description (`aria-disabled`) and carries the reason, rather than a bare\n * greyed control nobody can explain.\n */\nexport function ActionButton({ rule = PermissionRule.Enabled, disabledReason, onClick, emphasis = 'primary', children }: ActionButtonProps) {\n if (rule === PermissionRule.Hidden) return undefined;\n\n const disabled = rule === PermissionRule.Disabled;\n return (\n <button type='button' className='foundation-button' data-emphasis={emphasis} aria-disabled={disabled || undefined}\n title={disabled ? disabledReason : undefined} onClick={disabled ? undefined : onClick}>\n {children}\n {disabled && <span className='foundation-visually-hidden'>{`. ${disabledReason}`}</span>}\n </button>\n );\n}\n"],"names":["ActionButton","rule","PermissionRule","Enabled","disabledReason","onClick","emphasis","children","Hidden","undefined","disabled","Disabled","_jsxs","button","type","className","data-emphasis","aria-disabled","title","_jsx","span"],"mappings":";;;AAAA;AACA;AAqBA;;;;AAIC,IACM,SAASA,YAAAA,CAAa,EAAEC,IAAAA,GAAOC,eAAeC,OAAO,EAAEC,cAAc,EAAEC,OAAO,EAAEC,QAAAA,GAAW,SAAS,EAAEC,QAAQ,EAAqB,EAAA;AACtI,IAAA,IAAIN,IAAAA,KAASC,cAAAA,CAAeM,MAAM,EAAE,OAAOC,SAAAA;IAE3C,MAAMC,QAAAA,GAAWT,IAAAA,KAASC,cAAAA,CAAeS,QAAQ;AACjD,IAAA,qBACIC,IAAA,CAACC,QAAAA,EAAAA;QAAOC,IAAAA,EAAK,QAAA;QAASC,SAAAA,EAAU,mBAAA;QAAoBC,eAAAA,EAAeV,QAAAA;AAAUW,QAAAA,eAAAA,EAAeP,QAAAA,IAAYD,SAAAA;AACpGS,QAAAA,KAAAA,EAAOR,WAAWN,cAAAA,GAAiBK,SAAAA;AAAWJ,QAAAA,OAAAA,EAASK,WAAWD,SAAAA,GAAYJ,OAAAA;;AAC7EE,YAAAA,QAAAA;AACAG,YAAAA,QAAAA,kBAAYS,GAAA,CAACC,MAAAA,EAAAA;gBAAKL,SAAAA,EAAU,4BAAA;0BAA8B,CAAC,EAAE,EAAEX,cAAAA,CAAAA;;;;AAG5E;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionButtonControl.d.ts","sourceRoot":"","sources":["../../../foundation/ActionButtonControl.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAgB/D,wBAAgB,mBAAmB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,wBAAwB,+BAiBtF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { readOptionalString } from '../shell/elementProperties.js';
|
|
3
|
+
import { ActionButton } from './ActionButton.js';
|
|
4
|
+
import { readFoundationStrings } from './foundationStrings.js';
|
|
5
|
+
import { readPermissionRule } from './PermissionRule.js';
|
|
6
|
+
|
|
7
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
8
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
9
|
+
const emphases = [
|
|
10
|
+
'primary',
|
|
11
|
+
'secondary',
|
|
12
|
+
'quiet',
|
|
13
|
+
'danger'
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* The `actionButton` component: one action of a screen or a dialog, drawn the way every action of the foundation is.
|
|
17
|
+
*
|
|
18
|
+
* `label` is what it does - a verb, never "OK" - and `emphasis` is `primary`, `secondary`, `quiet` or `danger` (the confirming button of a destructive
|
|
19
|
+
* dialog). It honours the permission rule of spec Part B 1.5 through `permission`: enabled, disabled (shown, refusing, and saying why) or not rendered.
|
|
20
|
+
* Pressing it runs the behaviors attached to the element, which is how a document makes it close a dialog, navigate or execute a command; with
|
|
21
|
+
* `targetScreen` and no behavior it goes to that screen, as the shell's links do.
|
|
22
|
+
*/ function ActionButtonControl({ element, interactions }) {
|
|
23
|
+
const strings = readFoundationStrings(element);
|
|
24
|
+
const requested = readOptionalString(element, 'emphasis');
|
|
25
|
+
const emphasis = emphases.includes(requested ?? '') ? requested : 'primary';
|
|
26
|
+
const target = readOptionalString(element, 'targetScreen');
|
|
27
|
+
return /*#__PURE__*/ jsx("span", {
|
|
28
|
+
className: "foundation foundation-action",
|
|
29
|
+
"data-scene-id": element.id,
|
|
30
|
+
children: /*#__PURE__*/ jsx(ActionButton, {
|
|
31
|
+
rule: readPermissionRule(element),
|
|
32
|
+
emphasis: emphasis,
|
|
33
|
+
disabledReason: readOptionalString(element, 'disabledReason') ?? strings.disabledNoPermission,
|
|
34
|
+
onClick: (event)=>{
|
|
35
|
+
if (interactions?.onClick) interactions.onClick(event);
|
|
36
|
+
else if (target && typeof window !== 'undefined') window.location.hash = `#/${target}`;
|
|
37
|
+
},
|
|
38
|
+
children: readOptionalString(element, 'label') ?? ''
|
|
39
|
+
})
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { ActionButtonControl };
|
|
44
|
+
//# sourceMappingURL=ActionButtonControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionButtonControl.js","sources":["../../../foundation/ActionButtonControl.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { RegisteredComponentProps } from '@cratis/scene.react';\nimport { readOptionalString } from '../shell/elementProperties';\nimport { ActionButton } from './ActionButton';\nimport { readFoundationStrings } from './foundationStrings';\nimport { readPermissionRule } from './PermissionRule';\n\nconst emphases = ['primary', 'secondary', 'quiet', 'danger'] as const;\n\n/**\n * The `actionButton` component: one action of a screen or a dialog, drawn the way every action of the foundation is.\n *\n * `label` is what it does - a verb, never \"OK\" - and `emphasis` is `primary`, `secondary`, `quiet` or `danger` (the confirming button of a destructive\n * dialog). It honours the permission rule of spec Part B 1.5 through `permission`: enabled, disabled (shown, refusing, and saying why) or not rendered.\n * Pressing it runs the behaviors attached to the element, which is how a document makes it close a dialog, navigate or execute a command; with\n * `targetScreen` and no behavior it goes to that screen, as the shell's links do.\n */\nexport function ActionButtonControl({ element, interactions }: RegisteredComponentProps) {\n const strings = readFoundationStrings(element);\n const requested = readOptionalString(element, 'emphasis');\n const emphasis = (emphases as readonly string[]).includes(requested ?? '') ? (requested as typeof emphases[number]) : 'primary';\n const target = readOptionalString(element, 'targetScreen');\n\n return (\n <span className='foundation foundation-action' data-scene-id={element.id}>\n <ActionButton rule={readPermissionRule(element)} emphasis={emphasis} disabledReason={readOptionalString(element, 'disabledReason') ?? strings.disabledNoPermission}\n onClick={event => {\n if (interactions?.onClick) interactions.onClick(event);\n else if (target && typeof window !== 'undefined') window.location.hash = `#/${target}`;\n }}>\n {readOptionalString(element, 'label') ?? ''}\n </ActionButton>\n </span>\n );\n}\n"],"names":["emphases","ActionButtonControl","element","interactions","strings","readFoundationStrings","requested","readOptionalString","emphasis","includes","target","_jsx","span","className","data-scene-id","id","ActionButton","rule","readPermissionRule","disabledReason","disabledNoPermission","onClick","event","window","location","hash"],"mappings":";;;;;;AAAA;AACA;AAQA,MAAMA,QAAAA,GAAW;AAAC,IAAA,SAAA;AAAW,IAAA,WAAA;AAAa,IAAA,OAAA;AAAS,IAAA;AAAS,CAAA;AAE5D;;;;;;;AAOC,IACM,SAASC,mBAAAA,CAAoB,EAAEC,OAAO,EAAEC,YAAY,EAA4B,EAAA;AACnF,IAAA,MAAMC,UAAUC,qBAAAA,CAAsBH,OAAAA,CAAAA;IACtC,MAAMI,SAAAA,GAAYC,mBAAmBL,OAAAA,EAAS,UAAA,CAAA;AAC9C,IAAA,MAAMM,WAAW,QAACR,CAA+BS,QAAQ,CAACH,SAAAA,IAAa,MAAOA,SAAAA,GAAwC,SAAA;IACtH,MAAMI,MAAAA,GAASH,mBAAmBL,OAAAA,EAAS,cAAA,CAAA;AAE3C,IAAA,qBACIS,GAAA,CAACC,MAAAA,EAAAA;QAAKC,SAAAA,EAAU,8BAAA;AAA+BC,QAAAA,eAAAA,EAAeZ,QAAQa,EAAE;AACpE,QAAA,QAAA,gBAAAJ,GAAA,CAACK,YAAAA,EAAAA;AAAaC,YAAAA,IAAAA,EAAMC,kBAAAA,CAAmBhB,OAAAA,CAAAA;YAAUM,QAAAA,EAAUA,QAAAA;AAAUW,YAAAA,cAAAA,EAAgBZ,kBAAAA,CAAmBL,OAAAA,EAAS,gBAAA,CAAA,IAAqBE,OAAAA,CAAQgB,oBAAoB;AAC9JC,YAAAA,OAAAA,EAASC,CAAAA,KAAAA,GAAAA;AACL,gBAAA,IAAInB,YAAAA,EAAckB,OAAAA,EAASlB,YAAAA,CAAakB,OAAO,CAACC,KAAAA,CAAAA;AAC3C,qBAAA,IAAIZ,MAAAA,IAAU,OAAOa,MAAAA,KAAW,WAAA,EAAaA,MAAAA,CAAOC,QAAQ,CAACC,IAAI,GAAG,CAAC,EAAE,EAAEf,MAAAA,CAAAA,CAAQ;AAC1F,YAAA,CAAA;AACCH,YAAAA,QAAAA,EAAAA,kBAAAA,CAAmBL,SAAS,OAAA,CAAA,IAAY;;;AAIzD;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
2
|
+
export declare enum DialogPlacement {
|
|
3
|
+
Center = "center",
|
|
4
|
+
Side = "side",
|
|
5
|
+
Full = "full"
|
|
6
|
+
}
|
|
7
|
+
export declare enum DialogTone {
|
|
8
|
+
Default = "default",
|
|
9
|
+
Danger = "danger"
|
|
10
|
+
}
|
|
11
|
+
export declare function readDialogPlacement(element: RegisteredComponentProps['element']): DialogPlacement;
|
|
12
|
+
export declare const placementFor: (requested: DialogPlacement, compact: boolean) => DialogPlacement;
|
|
13
|
+
export declare function DialogFrame({ element, interactions }: RegisteredComponentProps): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=DialogFrame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DialogFrame.d.ts","sourceRoot":"","sources":["../../../foundation/DialogFrame.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAkC,MAAM,qBAAqB,CAAC;AAQ/F,oBAAY,eAAe;IACvB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,IAAI,SAAS;CAChB;AAGD,oBAAY,UAAU;IAClB,OAAO,YAAY;IACnB,MAAM,WAAW;CACpB;AAKD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,wBAAwB,CAAC,SAAS,CAAC,GAAG,eAAe,CAGjG;AAGD,eAAO,MAAM,YAAY,cAAe,eAAe,WAAW,OAAO,KAAG,eAA+D,CAAC;AAoB5I,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,wBAAwB,+BAoF9E"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useRef, useId, useContext, useCallback, useEffect } from 'react';
|
|
3
|
+
import { SceneNavigationContextInternal } from '@cratis/scene.react';
|
|
4
|
+
import { readOptionalString, readStrings } from '../shell/elementProperties.js';
|
|
5
|
+
import { FoundationIcon } from './FoundationIcon.js';
|
|
6
|
+
import { readFoundationStrings, formatText } from './foundationStrings.js';
|
|
7
|
+
import { readLocale, isRightToLeft } from './formatting.js';
|
|
8
|
+
import { useCompactWidth } from './useCompactWidth.js';
|
|
9
|
+
|
|
10
|
+
/** Where a dialog is drawn: in the middle of the page, as a drawer from the inline end, or filling the page. */ var DialogPlacement = /*#__PURE__*/ function(DialogPlacement) {
|
|
11
|
+
DialogPlacement["Center"] = "center";
|
|
12
|
+
DialogPlacement["Side"] = "side";
|
|
13
|
+
DialogPlacement["Full"] = "full";
|
|
14
|
+
return DialogPlacement;
|
|
15
|
+
}({});
|
|
16
|
+
/** What a dialog is about: an ordinary one, or one that cannot be undone and is drawn in the danger colors. */ var DialogTone = /*#__PURE__*/ function(DialogTone) {
|
|
17
|
+
DialogTone["Default"] = "default";
|
|
18
|
+
DialogTone["Danger"] = "danger";
|
|
19
|
+
return DialogTone;
|
|
20
|
+
}({});
|
|
21
|
+
const focusable = 'input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [href], [tabindex]:not([tabindex="-1"])';
|
|
22
|
+
/** Reads the placement property, falling back to the center for anything that is not one of the three. */ function readDialogPlacement(element) {
|
|
23
|
+
const value = readOptionalString(element, 'placement');
|
|
24
|
+
return value === "side" || value === "full" ? value : "center";
|
|
25
|
+
}
|
|
26
|
+
/** The placement a dialog is drawn with in a window of the given width class: a phone gets every dialog at full height and width (spec Part B 2.10, 1.5). */ const placementFor = (requested, compact)=>compact ? "full" : requested;
|
|
27
|
+
/** The elements a dialog's focus can rest on, in document order, that are not hidden. */ const focusableIn = (host)=>Array.from(host.querySelectorAll(focusable)).filter((candidate)=>!candidate.hidden && candidate.closest('[hidden]') === null);
|
|
28
|
+
/**
|
|
29
|
+
* The `dialogFrame` component: the head of a dialog template and everything that makes what the host draws around it behave as a dialog.
|
|
30
|
+
*
|
|
31
|
+
* It draws the heading (`title`, `subtitle`), an optional `message` and `consequences` list - what a confirmation says will happen - and a close button.
|
|
32
|
+
* The host draws the box a dialog template opens in (a `role="dialog" aria-modal="true"` element); this component takes that element on and gives it the
|
|
33
|
+
* parts of a dialog that must not differ from one template to the next:
|
|
34
|
+
*
|
|
35
|
+
* - it is named by the heading, takes focus when it opens (the first field, else the primary action, else the close button), keeps Tab inside it, and
|
|
36
|
+
* gives focus back to whatever opened it when it goes;
|
|
37
|
+
* - Escape and the close button run the behaviors attached to this element (a `CloseDialog` action), and close the dialog themselves when none is attached;
|
|
38
|
+
* - `placement` is `center` (default), `side` (a drawer from the inline end, which a right-to-left locale mirrors) or `full`; on a phone every dialog fills the page;
|
|
39
|
+
* - `tone` `danger` draws a dialog that cannot be undone in the danger colors.
|
|
40
|
+
*
|
|
41
|
+
* Every text it says comes from the strings table and the locale of the element, so an application localizes it like any foundation component.
|
|
42
|
+
*/ function DialogFrame({ element, interactions }) {
|
|
43
|
+
const frame = useRef(null);
|
|
44
|
+
const heading = useId();
|
|
45
|
+
const navigation = useContext(SceneNavigationContextInternal);
|
|
46
|
+
const compact = useCompactWidth();
|
|
47
|
+
const strings = readFoundationStrings(element);
|
|
48
|
+
const locale = readLocale(element);
|
|
49
|
+
const title = readOptionalString(element, 'title') ?? '';
|
|
50
|
+
const subtitle = readOptionalString(element, 'subtitle');
|
|
51
|
+
const message = readOptionalString(element, 'message');
|
|
52
|
+
const consequences = readStrings(element, 'consequences');
|
|
53
|
+
const placement = placementFor(readDialogPlacement(element), compact);
|
|
54
|
+
const tone = element.properties.tone === "danger" ? "danger" : "default";
|
|
55
|
+
const onClick = interactions?.onClick;
|
|
56
|
+
const close = useCallback(()=>{
|
|
57
|
+
if (onClick) onClick({
|
|
58
|
+
stopPropagation: ()=>undefined
|
|
59
|
+
});
|
|
60
|
+
else navigation?.closeDialog();
|
|
61
|
+
}, [
|
|
62
|
+
onClick,
|
|
63
|
+
navigation
|
|
64
|
+
]);
|
|
65
|
+
const closeRef = useRef(close);
|
|
66
|
+
closeRef.current = close;
|
|
67
|
+
useEffect(()=>{
|
|
68
|
+
const host = frame.current?.closest('[role="dialog"]');
|
|
69
|
+
if (!host) return;
|
|
70
|
+
const opener = document.activeElement instanceof HTMLElement ? document.activeElement : undefined;
|
|
71
|
+
const before = {
|
|
72
|
+
className: host.className,
|
|
73
|
+
labelledBy: host.getAttribute('aria-labelledby'),
|
|
74
|
+
placement: host.getAttribute('data-placement'),
|
|
75
|
+
tone: host.getAttribute('data-tone')
|
|
76
|
+
};
|
|
77
|
+
host.classList.add('foundation', 'foundation-dialog-host');
|
|
78
|
+
host.setAttribute('aria-labelledby', heading);
|
|
79
|
+
host.setAttribute('data-placement', placement);
|
|
80
|
+
host.setAttribute('data-tone', tone);
|
|
81
|
+
host.dir = isRightToLeft(locale) ? 'rtl' : host.dir;
|
|
82
|
+
const closeButton = frame.current?.querySelector('.foundation-dialog-close');
|
|
83
|
+
const targets = focusableIn(host);
|
|
84
|
+
(targets.find((target)=>/^(INPUT|SELECT|TEXTAREA)$/.test(target.tagName)) ?? targets.find((target)=>target !== closeButton) ?? closeButton)?.focus();
|
|
85
|
+
const onKeyDown = (event)=>{
|
|
86
|
+
if (event.key === 'Escape') {
|
|
87
|
+
event.preventDefault();
|
|
88
|
+
closeRef.current();
|
|
89
|
+
} else if (event.key === 'Tab') {
|
|
90
|
+
const inside = focusableIn(host);
|
|
91
|
+
if (inside.length === 0) {
|
|
92
|
+
event.preventDefault();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const first = inside[0];
|
|
96
|
+
const last = inside[inside.length - 1];
|
|
97
|
+
if (event.shiftKey && (document.activeElement === first || !host.contains(document.activeElement))) {
|
|
98
|
+
event.preventDefault();
|
|
99
|
+
last.focus();
|
|
100
|
+
} else if (!event.shiftKey && (document.activeElement === last || !host.contains(document.activeElement))) {
|
|
101
|
+
event.preventDefault();
|
|
102
|
+
first.focus();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
host.addEventListener('keydown', onKeyDown);
|
|
107
|
+
return ()=>{
|
|
108
|
+
host.removeEventListener('keydown', onKeyDown);
|
|
109
|
+
host.className = before.className;
|
|
110
|
+
for (const [name, value] of [
|
|
111
|
+
[
|
|
112
|
+
'aria-labelledby',
|
|
113
|
+
before.labelledBy
|
|
114
|
+
],
|
|
115
|
+
[
|
|
116
|
+
'data-placement',
|
|
117
|
+
before.placement
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
'data-tone',
|
|
121
|
+
before.tone
|
|
122
|
+
]
|
|
123
|
+
]){
|
|
124
|
+
if (value === null) host.removeAttribute(name);
|
|
125
|
+
else host.setAttribute(name, value);
|
|
126
|
+
}
|
|
127
|
+
if (opener?.isConnected) opener.focus();
|
|
128
|
+
};
|
|
129
|
+
}, [
|
|
130
|
+
heading,
|
|
131
|
+
placement,
|
|
132
|
+
tone,
|
|
133
|
+
locale
|
|
134
|
+
]);
|
|
135
|
+
return /*#__PURE__*/ jsxs("header", {
|
|
136
|
+
ref: frame,
|
|
137
|
+
className: "foundation foundation-dialog-frame",
|
|
138
|
+
"data-scene-id": element.id,
|
|
139
|
+
"data-placement": placement,
|
|
140
|
+
"data-tone": tone,
|
|
141
|
+
lang: locale,
|
|
142
|
+
dir: isRightToLeft(locale) ? 'rtl' : undefined,
|
|
143
|
+
children: [
|
|
144
|
+
/*#__PURE__*/ jsxs("div", {
|
|
145
|
+
className: "foundation-dialog-heading",
|
|
146
|
+
children: [
|
|
147
|
+
/*#__PURE__*/ jsxs("div", {
|
|
148
|
+
className: "foundation-dialog-titles",
|
|
149
|
+
children: [
|
|
150
|
+
/*#__PURE__*/ jsx("h2", {
|
|
151
|
+
id: heading,
|
|
152
|
+
className: "foundation-dialog-title",
|
|
153
|
+
children: title
|
|
154
|
+
}),
|
|
155
|
+
subtitle && /*#__PURE__*/ jsx("p", {
|
|
156
|
+
className: "foundation-dialog-subtitle",
|
|
157
|
+
children: subtitle
|
|
158
|
+
})
|
|
159
|
+
]
|
|
160
|
+
}),
|
|
161
|
+
/*#__PURE__*/ jsx("button", {
|
|
162
|
+
type: "button",
|
|
163
|
+
className: "foundation-dialog-close",
|
|
164
|
+
"aria-label": formatText(strings.dialogClose, {
|
|
165
|
+
title
|
|
166
|
+
}),
|
|
167
|
+
onClick: close,
|
|
168
|
+
children: /*#__PURE__*/ jsx(FoundationIcon, {
|
|
169
|
+
name: "close"
|
|
170
|
+
})
|
|
171
|
+
})
|
|
172
|
+
]
|
|
173
|
+
}),
|
|
174
|
+
message && /*#__PURE__*/ jsx("p", {
|
|
175
|
+
className: "foundation-dialog-message",
|
|
176
|
+
children: message
|
|
177
|
+
}),
|
|
178
|
+
consequences.length > 0 && /*#__PURE__*/ jsx("ul", {
|
|
179
|
+
className: "foundation-dialog-consequences",
|
|
180
|
+
"aria-label": strings.dialogConsequences,
|
|
181
|
+
children: consequences.map((consequence)=>/*#__PURE__*/ jsx("li", {
|
|
182
|
+
children: consequence
|
|
183
|
+
}, consequence))
|
|
184
|
+
})
|
|
185
|
+
]
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export { DialogFrame, DialogPlacement, DialogTone, placementFor, readDialogPlacement };
|
|
190
|
+
//# sourceMappingURL=DialogFrame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DialogFrame.js","sources":["../../../foundation/DialogFrame.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { useCallback, useContext, useEffect, useId, useRef } from 'react';\nimport { RegisteredComponentProps, SceneNavigationContextInternal } from '@cratis/scene.react';\nimport { readOptionalString, readStrings } from '../shell/elementProperties';\nimport { FoundationIcon } from './FoundationIcon';\nimport { formatText, readFoundationStrings } from './foundationStrings';\nimport { isRightToLeft, readLocale } from './formatting';\nimport { useCompactWidth } from './useCompactWidth';\n\n/** Where a dialog is drawn: in the middle of the page, as a drawer from the inline end, or filling the page. */\nexport enum DialogPlacement {\n Center = 'center',\n Side = 'side',\n Full = 'full',\n}\n\n/** What a dialog is about: an ordinary one, or one that cannot be undone and is drawn in the danger colors. */\nexport enum DialogTone {\n Default = 'default',\n Danger = 'danger',\n}\n\nconst focusable = 'input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [href], [tabindex]:not([tabindex=\"-1\"])';\n\n/** Reads the placement property, falling back to the center for anything that is not one of the three. */\nexport function readDialogPlacement(element: RegisteredComponentProps['element']): DialogPlacement {\n const value = readOptionalString(element, 'placement');\n return value === DialogPlacement.Side || value === DialogPlacement.Full ? value : DialogPlacement.Center;\n}\n\n/** The placement a dialog is drawn with in a window of the given width class: a phone gets every dialog at full height and width (spec Part B 2.10, 1.5). */\nexport const placementFor = (requested: DialogPlacement, compact: boolean): DialogPlacement => (compact ? DialogPlacement.Full : requested);\n\n/** The elements a dialog's focus can rest on, in document order, that are not hidden. */\nconst focusableIn = (host: HTMLElement): HTMLElement[] => Array.from(host.querySelectorAll<HTMLElement>(focusable)).filter(candidate => !candidate.hidden && candidate.closest('[hidden]') === null);\n\n/**\n * The `dialogFrame` component: the head of a dialog template and everything that makes what the host draws around it behave as a dialog.\n *\n * It draws the heading (`title`, `subtitle`), an optional `message` and `consequences` list - what a confirmation says will happen - and a close button.\n * The host draws the box a dialog template opens in (a `role=\"dialog\" aria-modal=\"true\"` element); this component takes that element on and gives it the\n * parts of a dialog that must not differ from one template to the next:\n *\n * - it is named by the heading, takes focus when it opens (the first field, else the primary action, else the close button), keeps Tab inside it, and\n * gives focus back to whatever opened it when it goes;\n * - Escape and the close button run the behaviors attached to this element (a `CloseDialog` action), and close the dialog themselves when none is attached;\n * - `placement` is `center` (default), `side` (a drawer from the inline end, which a right-to-left locale mirrors) or `full`; on a phone every dialog fills the page;\n * - `tone` `danger` draws a dialog that cannot be undone in the danger colors.\n *\n * Every text it says comes from the strings table and the locale of the element, so an application localizes it like any foundation component.\n */\nexport function DialogFrame({ element, interactions }: RegisteredComponentProps) {\n const frame = useRef<HTMLElement>(null);\n const heading = useId();\n const navigation = useContext(SceneNavigationContextInternal);\n const compact = useCompactWidth();\n const strings = readFoundationStrings(element);\n const locale = readLocale(element);\n const title = readOptionalString(element, 'title') ?? '';\n const subtitle = readOptionalString(element, 'subtitle');\n const message = readOptionalString(element, 'message');\n const consequences = readStrings(element, 'consequences');\n const placement = placementFor(readDialogPlacement(element), compact);\n const tone = element.properties.tone === DialogTone.Danger ? DialogTone.Danger : DialogTone.Default;\n\n const onClick = interactions?.onClick;\n const close = useCallback(() => {\n if (onClick) onClick({ stopPropagation: () => undefined });\n else navigation?.closeDialog();\n }, [onClick, navigation]);\n const closeRef = useRef(close);\n closeRef.current = close;\n\n useEffect(() => {\n const host = frame.current?.closest<HTMLElement>('[role=\"dialog\"]');\n if (!host) return;\n\n const opener = document.activeElement instanceof HTMLElement ? document.activeElement : undefined;\n const before = { className: host.className, labelledBy: host.getAttribute('aria-labelledby'), placement: host.getAttribute('data-placement'), tone: host.getAttribute('data-tone') };\n host.classList.add('foundation', 'foundation-dialog-host');\n host.setAttribute('aria-labelledby', heading);\n host.setAttribute('data-placement', placement);\n host.setAttribute('data-tone', tone);\n host.dir = isRightToLeft(locale) ? 'rtl' : host.dir;\n\n const closeButton = frame.current?.querySelector<HTMLElement>('.foundation-dialog-close');\n const targets = focusableIn(host);\n (targets.find(target => /^(INPUT|SELECT|TEXTAREA)$/.test(target.tagName)) ?? targets.find(target => target !== closeButton) ?? closeButton)?.focus();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n closeRef.current();\n } else if (event.key === 'Tab') {\n const inside = focusableIn(host);\n if (inside.length === 0) { event.preventDefault(); return; }\n const first = inside[0];\n const last = inside[inside.length - 1];\n if (event.shiftKey && (document.activeElement === first || !host.contains(document.activeElement))) { event.preventDefault(); last.focus(); }\n else if (!event.shiftKey && (document.activeElement === last || !host.contains(document.activeElement))) { event.preventDefault(); first.focus(); }\n }\n };\n\n host.addEventListener('keydown', onKeyDown);\n return () => {\n host.removeEventListener('keydown', onKeyDown);\n host.className = before.className;\n for (const [name, value] of [['aria-labelledby', before.labelledBy], ['data-placement', before.placement], ['data-tone', before.tone]] as const) {\n if (value === null) host.removeAttribute(name);\n else host.setAttribute(name, value);\n }\n\n if (opener?.isConnected) opener.focus();\n };\n }, [heading, placement, tone, locale]);\n\n return (\n <header ref={frame} className='foundation foundation-dialog-frame' data-scene-id={element.id} data-placement={placement} data-tone={tone} lang={locale} dir={isRightToLeft(locale) ? 'rtl' : undefined}>\n <div className='foundation-dialog-heading'>\n <div className='foundation-dialog-titles'>\n <h2 id={heading} className='foundation-dialog-title'>{title}</h2>\n {subtitle && <p className='foundation-dialog-subtitle'>{subtitle}</p>}\n </div>\n <button type='button' className='foundation-dialog-close' aria-label={formatText(strings.dialogClose, { title })} onClick={close}>\n <FoundationIcon name='close' />\n </button>\n </div>\n {message && <p className='foundation-dialog-message'>{message}</p>}\n {consequences.length > 0 && (\n <ul className='foundation-dialog-consequences' aria-label={strings.dialogConsequences}>\n {consequences.map(consequence => <li key={consequence}>{consequence}</li>)}\n </ul>\n )}\n </header>\n );\n}\n"],"names":["DialogPlacement","DialogTone","focusable","readDialogPlacement","element","value","readOptionalString","placementFor","requested","compact","focusableIn","host","Array","from","querySelectorAll","filter","candidate","hidden","closest","DialogFrame","interactions","frame","useRef","heading","useId","navigation","useContext","SceneNavigationContextInternal","useCompactWidth","strings","readFoundationStrings","locale","readLocale","title","subtitle","message","consequences","readStrings","placement","tone","properties","onClick","close","useCallback","stopPropagation","undefined","closeDialog","closeRef","current","useEffect","opener","document","activeElement","HTMLElement","before","className","labelledBy","getAttribute","classList","add","setAttribute","dir","isRightToLeft","closeButton","querySelector","targets","find","target","test","tagName","focus","onKeyDown","event","key","preventDefault","inside","length","first","last","shiftKey","contains","addEventListener","removeEventListener","name","removeAttribute","isConnected","_jsxs","header","ref","data-scene-id","id","data-placement","data-tone","lang","div","_jsx","h2","p","button","type","aria-label","formatText","dialogClose","FoundationIcon","ul","dialogConsequences","map","consequence","li"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormScreenBody.d.ts","sourceRoot":"","sources":["../../../foundation/FormScreenBody.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAkB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"FormScreenBody.d.ts","sourceRoot":"","sources":["../../../foundation/FormScreenBody.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAkB,MAAM,qBAAqB,CAAC;AAwG/E,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,wBAAwB,+BA0FjG"}
|
|
@@ -127,6 +127,16 @@ function FieldInput({ field, value, error, readOnly, locale, required, choose, s
|
|
|
127
127
|
onChange: (event)=>set(event.target.value === '' ? '' : Number(event.target.value))
|
|
128
128
|
});
|
|
129
129
|
break;
|
|
130
|
+
case FormFieldType.Password:
|
|
131
|
+
input = /*#__PURE__*/ jsx("input", {
|
|
132
|
+
...common,
|
|
133
|
+
type: "password",
|
|
134
|
+
autoComplete: "current-password",
|
|
135
|
+
value: text,
|
|
136
|
+
placeholder: field.placeholder,
|
|
137
|
+
onChange: (event)=>set(event.target.value)
|
|
138
|
+
});
|
|
139
|
+
break;
|
|
130
140
|
case FormFieldType.Date:
|
|
131
141
|
input = /*#__PURE__*/ jsx("input", {
|
|
132
142
|
...common,
|
|
@@ -216,9 +226,9 @@ function FieldInput({ field, value, error, readOnly, locale, required, choose, s
|
|
|
216
226
|
* unsaved-changes guard.
|
|
217
227
|
*
|
|
218
228
|
* `sections` (`title`, `columns`, `fields`) and `values` come from the screen; a field is `text`, `number`, `currency`, `date`, `select`, `multiSelect`, `lookup`,
|
|
219
|
-
* `toggle`, `file`, `richText` or `
|
|
229
|
+
* `toggle`, `file`, `richText`, `address` or `password`. Validation is inline on blur and a summary on submit (an alert listing each field as a link back to it); a server's
|
|
220
230
|
* `errors` map onto the fields, and one for a field the form lacks is shown as a general error so it is never lost. Required fields are marked with an asterisk
|
|
221
|
-
* *and* the word. `mode` is `create`, `edit`, `readOnly` or `settings` - settings has one Save for each section. The edited values are the `value` output; Save
|
|
231
|
+
* *and* the word. `saveAndNew` false leaves out "Save and new" (a dialog that creates one record). `mode` is `create`, `edit`, `readOnly` or `settings` - settings has one Save for each section. The edited values are the `value` output; Save
|
|
222
232
|
* runs the behaviors attached to the element. While values differ from the saved ones the form says so, warns the browser before the page is left, and offers
|
|
223
233
|
* "Discard changes". The action bar sticks to the bottom as the form scrolls.
|
|
224
234
|
*/ function FormScreenBody({ element, interactions, bindingOutputs }) {
|
|
@@ -419,7 +429,7 @@ function FieldInput({ field, value, error, readOnly, locale, required, choose, s
|
|
|
419
429
|
}),
|
|
420
430
|
children: strings.formCancel
|
|
421
431
|
}),
|
|
422
|
-
mode === FormMode.Create && /*#__PURE__*/ jsx(ActionButton, {
|
|
432
|
+
mode === FormMode.Create && element.properties.saveAndNew !== false && /*#__PURE__*/ jsx(ActionButton, {
|
|
423
433
|
rule: canSave,
|
|
424
434
|
emphasis: "secondary",
|
|
425
435
|
disabledReason: strings.disabledNoPermission,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormScreenBody.js","sources":["../../../foundation/FormScreenBody.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { useEffect, useId, useMemo, useRef, useState } from 'react';\nimport { RegisteredComponentProps, useValueOutput } from '@cratis/scene.react';\nimport { ActionButton } from './ActionButton';\nimport { ComponentState, readComponentState } from './ComponentState';\nimport { FormField, FormFieldType, FormMode, FormSection, FormValues, addressLines, mapServerErrors, readFormMode, readFormSections, sameValues, validate } from './formModel';\nimport { readLocale } from './formatting';\nimport { formatText, readFoundationStrings } from './foundationStrings';\nimport { readPermissionRule } from './PermissionRule';\nimport { FoundationIcon } from './FoundationIcon';\nimport { FoundationFrame } from './StateFrame';\n\ninterface FieldProps {\n field: FormField;\n value: unknown;\n error?: string;\n readOnly: boolean;\n locale: string;\n required: string;\n choose: string;\n set(value: unknown): void;\n blur(): void;\n}\n\nfunction FieldInput({ field, value, error, readOnly, locale, required, choose, set, blur }: FieldProps) {\n const id = useId();\n const describedBy = [field.help ? `${id}-help` : undefined, error ? `${id}-error` : undefined].filter(Boolean).join(' ') || undefined;\n const common = { id, 'aria-invalid': error ? true : undefined, 'aria-required': field.required || undefined, 'aria-describedby': describedBy, disabled: readOnly, onBlur: blur } as const;\n const text = typeof value === 'string' || typeof value === 'number' ? String(value) : '';\n let input;\n\n switch (field.type) {\n case FormFieldType.Toggle:\n input = <input {...common} type='checkbox' role='switch' checked={value === true} onChange={event => set(event.target.checked)} />;\n break;\n case FormFieldType.Select:\n case FormFieldType.Lookup:\n input = <select {...common} value={text} onChange={event => set(event.target.value)}><option value=''>{choose}</option>{field.options.map(option => <option key={option} value={option}>{option}</option>)}</select>;\n break;\n case FormFieldType.MultiSelect:\n input = (\n <fieldset className='foundation-fieldset' aria-describedby={describedBy} disabled={readOnly}>\n {field.options.map(option => (\n <label key={option} className='foundation-check'>\n <input type='checkbox' checked={Array.isArray(value) && value.includes(option)} onBlur={blur}\n onChange={event => set(event.target.checked ? [...(Array.isArray(value) ? value : []), option] : (Array.isArray(value) ? value : []).filter(candidate => candidate !== option))} />\n <span>{option}</span>\n </label>\n ))}\n </fieldset>\n );\n break;\n case FormFieldType.RichText:\n input = <textarea {...common} rows={5} value={text} placeholder={field.placeholder} onChange={event => set(event.target.value)} />;\n break;\n case FormFieldType.File:\n input = <input {...common} type='file' onChange={event => set(Array.from(event.target.files ?? []).map(file => file.name))} />;\n break;\n case FormFieldType.Address: {\n const lines = typeof value === 'object' && value !== null ? (value as Record<string, string>) : {};\n input = (\n <div className='foundation-address' role='group' aria-describedby={describedBy}>\n {addressLines.map(line => (\n <input key={line} type='text' aria-label={`${field.label}: ${line}`} placeholder={line} disabled={readOnly} value={lines[line] ?? ''} onBlur={blur} onChange={event => set({ ...lines, [line]: event.target.value })} />\n ))}\n </div>\n );\n break;\n }\n case FormFieldType.Number:\n case FormFieldType.Currency:\n input = <input {...common} type='number' inputMode='decimal' value={text} placeholder={field.placeholder} onChange={event => set(event.target.value === '' ? '' : Number(event.target.value))} />;\n break;\n case FormFieldType.Date:\n input = <input {...common} type='date' lang={locale} value={text} onChange={event => set(event.target.value)} />;\n break;\n default:\n input = <input {...common} type='text' value={text} placeholder={field.placeholder} onChange={event => set(event.target.value)} />;\n }\n\n const grouped = field.type === FormFieldType.MultiSelect || field.type === FormFieldType.Address;\n return (\n <div className='foundation-field' style={{ gridColumn: `span ${field.span}` }} data-invalid={error ? true : undefined}>\n {grouped ? <span className='foundation-field-label' id={`${id}-label`}>{field.label}{field.required && <span className='foundation-required' title={required}> *<span className='foundation-visually-hidden'> ({required})</span></span>}</span>\n : <label htmlFor={id} className='foundation-field-label'>{field.label}{field.required && <span className='foundation-required' title={required}> *<span className='foundation-visually-hidden'> ({required})</span></span>}</label>}\n {input}\n {field.help && <span id={`${id}-help`} className='foundation-count'>{field.help}</span>}\n {error && <span id={`${id}-error`} className='foundation-field-error' role='alert'>{error}</span>}\n </div>\n );\n}\n\n/**\n * The `formScreenBody` component: titled sections of fields in a one-to-three column grid, validated, with the Save / Save and new / Cancel bar and the\n * unsaved-changes guard.\n *\n * `sections` (`title`, `columns`, `fields`) and `values` come from the screen; a field is `text`, `number`, `currency`, `date`, `select`, `multiSelect`, `lookup`,\n * `toggle`, `file`, `richText` or `address`. Validation is inline on blur and a summary on submit (an alert listing each field as a link back to it); a server's\n * `errors` map onto the fields, and one for a field the form lacks is shown as a general error so it is never lost. Required fields are marked with an asterisk\n * *and* the word. `mode` is `create`, `edit`, `readOnly` or `settings` - settings has one Save for each section. The edited values are the `value` output; Save\n * runs the behaviors attached to the element. While values differ from the saved ones the form says so, warns the browser before the page is left, and offers\n * \"Discard changes\". The action bar sticks to the bottom as the form scrolls.\n */\nexport function FormScreenBody({ element, interactions, bindingOutputs }: RegisteredComponentProps) {\n const sections = useMemo(() => readFormSections(element.properties.sections), [element.properties.sections]);\n const mode = readFormMode(element.properties.mode);\n const suppliedValues = (typeof element.properties.values === 'object' && element.properties.values !== null && !Array.isArray(element.properties.values) ? element.properties.values : {}) as FormValues;\n const suppliedKey = JSON.stringify(suppliedValues);\n const [saved, setSaved] = useState<FormValues>(suppliedValues);\n const [values, setValues] = useState<FormValues>(suppliedValues);\n const [touched, setTouched] = useState<Set<string>>(new Set());\n const [submitted, setSubmitted] = useState(false);\n const [justSaved, setJustSaved] = useState(false);\n const summary = useRef<HTMLDivElement>(null);\n const strings = readFoundationStrings(element);\n const locale = readLocale(element);\n const state = readComponentState(element, sections.length > 0);\n const readOnly = mode === FormMode.ReadOnly || readPermissionRule(element, 'editPermission') !== 'enabled';\n const canSave = readPermissionRule(element, 'savePermission');\n const problems = validate(sections, values);\n const server = useMemo(() => mapServerErrors(sections, element.properties.errors), [sections, element.properties.errors]);\n const dirty = !sameValues(values, saved);\n const labelOf = (name: string) => sections.flatMap(section => section.fields).find(field => field.name === name)?.label ?? name;\n const wording = (name: string, kind: 'required' | 'invalid') => formatText(kind === 'required' ? strings.formRequiredField : strings.formInvalidField, { label: labelOf(name) });\n const errorOf = (name: string) => server.byField[name] ?? ((touched.has(name) || submitted) && problems[name] ? wording(name, problems[name]) : undefined);\n const invalid = Object.keys(problems);\n\n useEffect(() => { setSaved(suppliedValues); setValues(suppliedValues); setTouched(new Set()); setSubmitted(false); }, [suppliedKey]);\n useValueOutput(bindingOutputs, values);\n useEffect(() => {\n if (!dirty || typeof window === 'undefined') return;\n const guard = (event: BeforeUnloadEvent) => { event.preventDefault(); event.returnValue = ''; };\n window.addEventListener('beforeunload', guard);\n return () => window.removeEventListener('beforeunload', guard);\n }, [dirty]);\n\n const submit = (scope?: FormSection) => {\n setSubmitted(true);\n const scoped = scope ? scope.fields.filter(field => problems[field.name]) : invalid.map(name => ({ name }));\n if (scoped.length > 0) { requestAnimationFrame(() => summary.current?.focus()); return; }\n setSaved(values);\n setJustSaved(true);\n interactions?.onClick?.({ stopPropagation: () => undefined });\n };\n const edit = (name: string, value: unknown) => { setValues(current => ({ ...current, [name]: value })); setJustSaved(false); interactions?.onChange?.(); };\n\n return (\n <FoundationFrame element={element} interactions={interactions} name='form-screen' state={state} skeleton={[40, 100, 100, 70]}>\n {state !== ComponentState.Loading && (\n <form noValidate onSubmit={event => { event.preventDefault(); if (mode !== FormMode.Settings) submit(); }}>\n {readOnly && mode === FormMode.ReadOnly && <p className='foundation-count' role='status'>{strings.formReadOnly}</p>}\n {(submitted && invalid.length > 0 || server.general.length > 0) && (\n <div ref={summary} tabIndex={-1} role='alert' className='foundation-message' data-tone='danger'>\n <FoundationIcon name='alert' />\n <div className='foundation-message-text'>\n <strong>{invalid.length === 1 ? strings.formSummaryOne : formatText(strings.formSummary, { count: invalid.length })}</strong>\n <ul>\n {invalid.map(name => <li key={name}>{wording(name, problems[name])}</li>)}\n {server.general.map(message => <li key={message}>{message}</li>)}\n </ul>\n </div>\n </div>\n )}\n {sections.map(section => (\n <fieldset key={section.id} className='foundation-form-section' disabled={false}>\n {section.title && <legend>{section.title}</legend>}\n <div className='foundation-form-grid' style={{ gridTemplateColumns: `repeat(${section.columns}, minmax(0, 1fr))` }} data-columns={section.columns}>\n {section.fields.map(field => (\n <FieldInput key={field.name} field={field} value={values[field.name]} error={errorOf(field.name)} readOnly={readOnly} locale={locale} required={strings.formRequired} choose={strings.formChoose}\n set={value => edit(field.name, value)} blur={() => setTouched(current => new Set(current).add(field.name))} />\n ))}\n </div>\n {mode === FormMode.Settings && !readOnly && (\n <div className='foundation-form-section-actions'>\n <ActionButton rule={canSave} emphasis='secondary' disabledReason={strings.disabledNoPermission} onClick={() => submit(section)}>{formatText(strings.formSectionSave, { section: section.title })}</ActionButton>\n </div>\n )}\n </fieldset>\n ))}\n {mode !== FormMode.Settings && mode !== FormMode.ReadOnly && (\n <div className='foundation-form-actions' role='group' aria-label={strings.listActions}>\n <span role='status' className='foundation-count'>{dirty ? strings.formUnsaved : justSaved ? strings.formSaved : ''}</span>\n <span className='foundation-wizard-spacer' />\n {dirty && <ActionButton emphasis='quiet' disabledReason={strings.disabledNoPermission} onClick={() => { setValues(saved); setTouched(new Set()); setSubmitted(false); }}>{strings.formDiscard}</ActionButton>}\n <ActionButton emphasis='secondary' disabledReason={strings.disabledNoPermission} onClick={() => interactions?.onClick?.({ stopPropagation: () => undefined })}>{strings.formCancel}</ActionButton>\n {mode === FormMode.Create && <ActionButton rule={canSave} emphasis='secondary' disabledReason={strings.disabledNoPermission} onClick={() => { submit(); }}>{strings.formSaveAndNew}</ActionButton>}\n <ActionButton rule={canSave} disabledReason={strings.disabledNoPermission} onClick={() => submit()}>{strings.formSave}</ActionButton>\n </div>\n )}\n </form>\n )}\n </FoundationFrame>\n );\n}\n"],"names":["FieldInput","field","value","error","readOnly","locale","required","choose","set","blur","id","useId","describedBy","help","undefined","filter","Boolean","join","common","disabled","onBlur","text","String","input","type","FormFieldType","Toggle","_jsx","role","checked","onChange","event","target","Select","Lookup","_jsxs","select","option","options","map","MultiSelect","fieldset","className","aria-describedby","label","Array","isArray","includes","candidate","span","RichText","textarea","rows","placeholder","File","from","files","file","name","Address","lines","div","addressLines","line","aria-label","Number","Currency","inputMode","Date","lang","grouped","style","gridColumn","data-invalid","title","htmlFor","FormScreenBody","element","interactions","bindingOutputs","sections","useMemo","readFormSections","properties","mode","readFormMode","suppliedValues","values","suppliedKey","JSON","stringify","saved","setSaved","useState","setValues","touched","setTouched","Set","submitted","setSubmitted","justSaved","setJustSaved","summary","useRef","strings","readFoundationStrings","readLocale","state","readComponentState","length","FormMode","ReadOnly","readPermissionRule","canSave","problems","validate","server","mapServerErrors","errors","dirty","sameValues","labelOf","flatMap","section","fields","find","wording","kind","formatText","formRequiredField","formInvalidField","errorOf","byField","has","invalid","Object","keys","useEffect","useValueOutput","window","guard","preventDefault","returnValue","addEventListener","removeEventListener","submit","scope","scoped","requestAnimationFrame","current","focus","onClick","stopPropagation","edit","FoundationFrame","skeleton","ComponentState","Loading","form","noValidate","onSubmit","Settings","p","formReadOnly","general","ref","tabIndex","data-tone","FoundationIcon","strong","formSummaryOne","formSummary","count","ul","li","message","legend","gridTemplateColumns","columns","data-columns","formRequired","formChoose","add","ActionButton","rule","emphasis","disabledReason","disabledNoPermission","formSectionSave","listActions","formUnsaved","formSaved","formDiscard","formCancel","Create","formSaveAndNew","formSave"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FormScreenBody.js","sources":["../../../foundation/FormScreenBody.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { useEffect, useId, useMemo, useRef, useState } from 'react';\nimport { RegisteredComponentProps, useValueOutput } from '@cratis/scene.react';\nimport { ActionButton } from './ActionButton';\nimport { ComponentState, readComponentState } from './ComponentState';\nimport { FormField, FormFieldType, FormMode, FormSection, FormValues, addressLines, mapServerErrors, readFormMode, readFormSections, sameValues, validate } from './formModel';\nimport { readLocale } from './formatting';\nimport { formatText, readFoundationStrings } from './foundationStrings';\nimport { readPermissionRule } from './PermissionRule';\nimport { FoundationIcon } from './FoundationIcon';\nimport { FoundationFrame } from './StateFrame';\n\ninterface FieldProps {\n field: FormField;\n value: unknown;\n error?: string;\n readOnly: boolean;\n locale: string;\n required: string;\n choose: string;\n set(value: unknown): void;\n blur(): void;\n}\n\nfunction FieldInput({ field, value, error, readOnly, locale, required, choose, set, blur }: FieldProps) {\n const id = useId();\n const describedBy = [field.help ? `${id}-help` : undefined, error ? `${id}-error` : undefined].filter(Boolean).join(' ') || undefined;\n const common = { id, 'aria-invalid': error ? true : undefined, 'aria-required': field.required || undefined, 'aria-describedby': describedBy, disabled: readOnly, onBlur: blur } as const;\n const text = typeof value === 'string' || typeof value === 'number' ? String(value) : '';\n let input;\n\n switch (field.type) {\n case FormFieldType.Toggle:\n input = <input {...common} type='checkbox' role='switch' checked={value === true} onChange={event => set(event.target.checked)} />;\n break;\n case FormFieldType.Select:\n case FormFieldType.Lookup:\n input = <select {...common} value={text} onChange={event => set(event.target.value)}><option value=''>{choose}</option>{field.options.map(option => <option key={option} value={option}>{option}</option>)}</select>;\n break;\n case FormFieldType.MultiSelect:\n input = (\n <fieldset className='foundation-fieldset' aria-describedby={describedBy} disabled={readOnly}>\n {field.options.map(option => (\n <label key={option} className='foundation-check'>\n <input type='checkbox' checked={Array.isArray(value) && value.includes(option)} onBlur={blur}\n onChange={event => set(event.target.checked ? [...(Array.isArray(value) ? value : []), option] : (Array.isArray(value) ? value : []).filter(candidate => candidate !== option))} />\n <span>{option}</span>\n </label>\n ))}\n </fieldset>\n );\n break;\n case FormFieldType.RichText:\n input = <textarea {...common} rows={5} value={text} placeholder={field.placeholder} onChange={event => set(event.target.value)} />;\n break;\n case FormFieldType.File:\n input = <input {...common} type='file' onChange={event => set(Array.from(event.target.files ?? []).map(file => file.name))} />;\n break;\n case FormFieldType.Address: {\n const lines = typeof value === 'object' && value !== null ? (value as Record<string, string>) : {};\n input = (\n <div className='foundation-address' role='group' aria-describedby={describedBy}>\n {addressLines.map(line => (\n <input key={line} type='text' aria-label={`${field.label}: ${line}`} placeholder={line} disabled={readOnly} value={lines[line] ?? ''} onBlur={blur} onChange={event => set({ ...lines, [line]: event.target.value })} />\n ))}\n </div>\n );\n break;\n }\n case FormFieldType.Number:\n case FormFieldType.Currency:\n input = <input {...common} type='number' inputMode='decimal' value={text} placeholder={field.placeholder} onChange={event => set(event.target.value === '' ? '' : Number(event.target.value))} />;\n break;\n case FormFieldType.Password:\n input = <input {...common} type='password' autoComplete='current-password' value={text} placeholder={field.placeholder} onChange={event => set(event.target.value)} />;\n break;\n case FormFieldType.Date:\n input = <input {...common} type='date' lang={locale} value={text} onChange={event => set(event.target.value)} />;\n break;\n default:\n input = <input {...common} type='text' value={text} placeholder={field.placeholder} onChange={event => set(event.target.value)} />;\n }\n\n const grouped = field.type === FormFieldType.MultiSelect || field.type === FormFieldType.Address;\n return (\n <div className='foundation-field' style={{ gridColumn: `span ${field.span}` }} data-invalid={error ? true : undefined}>\n {grouped ? <span className='foundation-field-label' id={`${id}-label`}>{field.label}{field.required && <span className='foundation-required' title={required}> *<span className='foundation-visually-hidden'> ({required})</span></span>}</span>\n : <label htmlFor={id} className='foundation-field-label'>{field.label}{field.required && <span className='foundation-required' title={required}> *<span className='foundation-visually-hidden'> ({required})</span></span>}</label>}\n {input}\n {field.help && <span id={`${id}-help`} className='foundation-count'>{field.help}</span>}\n {error && <span id={`${id}-error`} className='foundation-field-error' role='alert'>{error}</span>}\n </div>\n );\n}\n\n/**\n * The `formScreenBody` component: titled sections of fields in a one-to-three column grid, validated, with the Save / Save and new / Cancel bar and the\n * unsaved-changes guard.\n *\n * `sections` (`title`, `columns`, `fields`) and `values` come from the screen; a field is `text`, `number`, `currency`, `date`, `select`, `multiSelect`, `lookup`,\n * `toggle`, `file`, `richText`, `address` or `password`. Validation is inline on blur and a summary on submit (an alert listing each field as a link back to it); a server's\n * `errors` map onto the fields, and one for a field the form lacks is shown as a general error so it is never lost. Required fields are marked with an asterisk\n * *and* the word. `saveAndNew` false leaves out \"Save and new\" (a dialog that creates one record). `mode` is `create`, `edit`, `readOnly` or `settings` - settings has one Save for each section. The edited values are the `value` output; Save\n * runs the behaviors attached to the element. While values differ from the saved ones the form says so, warns the browser before the page is left, and offers\n * \"Discard changes\". The action bar sticks to the bottom as the form scrolls.\n */\nexport function FormScreenBody({ element, interactions, bindingOutputs }: RegisteredComponentProps) {\n const sections = useMemo(() => readFormSections(element.properties.sections), [element.properties.sections]);\n const mode = readFormMode(element.properties.mode);\n const suppliedValues = (typeof element.properties.values === 'object' && element.properties.values !== null && !Array.isArray(element.properties.values) ? element.properties.values : {}) as FormValues;\n const suppliedKey = JSON.stringify(suppliedValues);\n const [saved, setSaved] = useState<FormValues>(suppliedValues);\n const [values, setValues] = useState<FormValues>(suppliedValues);\n const [touched, setTouched] = useState<Set<string>>(new Set());\n const [submitted, setSubmitted] = useState(false);\n const [justSaved, setJustSaved] = useState(false);\n const summary = useRef<HTMLDivElement>(null);\n const strings = readFoundationStrings(element);\n const locale = readLocale(element);\n const state = readComponentState(element, sections.length > 0);\n const readOnly = mode === FormMode.ReadOnly || readPermissionRule(element, 'editPermission') !== 'enabled';\n const canSave = readPermissionRule(element, 'savePermission');\n const problems = validate(sections, values);\n const server = useMemo(() => mapServerErrors(sections, element.properties.errors), [sections, element.properties.errors]);\n const dirty = !sameValues(values, saved);\n const labelOf = (name: string) => sections.flatMap(section => section.fields).find(field => field.name === name)?.label ?? name;\n const wording = (name: string, kind: 'required' | 'invalid') => formatText(kind === 'required' ? strings.formRequiredField : strings.formInvalidField, { label: labelOf(name) });\n const errorOf = (name: string) => server.byField[name] ?? ((touched.has(name) || submitted) && problems[name] ? wording(name, problems[name]) : undefined);\n const invalid = Object.keys(problems);\n\n useEffect(() => { setSaved(suppliedValues); setValues(suppliedValues); setTouched(new Set()); setSubmitted(false); }, [suppliedKey]);\n useValueOutput(bindingOutputs, values);\n useEffect(() => {\n if (!dirty || typeof window === 'undefined') return;\n const guard = (event: BeforeUnloadEvent) => { event.preventDefault(); event.returnValue = ''; };\n window.addEventListener('beforeunload', guard);\n return () => window.removeEventListener('beforeunload', guard);\n }, [dirty]);\n\n const submit = (scope?: FormSection) => {\n setSubmitted(true);\n const scoped = scope ? scope.fields.filter(field => problems[field.name]) : invalid.map(name => ({ name }));\n if (scoped.length > 0) { requestAnimationFrame(() => summary.current?.focus()); return; }\n setSaved(values);\n setJustSaved(true);\n interactions?.onClick?.({ stopPropagation: () => undefined });\n };\n const edit = (name: string, value: unknown) => { setValues(current => ({ ...current, [name]: value })); setJustSaved(false); interactions?.onChange?.(); };\n\n return (\n <FoundationFrame element={element} interactions={interactions} name='form-screen' state={state} skeleton={[40, 100, 100, 70]}>\n {state !== ComponentState.Loading && (\n <form noValidate onSubmit={event => { event.preventDefault(); if (mode !== FormMode.Settings) submit(); }}>\n {readOnly && mode === FormMode.ReadOnly && <p className='foundation-count' role='status'>{strings.formReadOnly}</p>}\n {(submitted && invalid.length > 0 || server.general.length > 0) && (\n <div ref={summary} tabIndex={-1} role='alert' className='foundation-message' data-tone='danger'>\n <FoundationIcon name='alert' />\n <div className='foundation-message-text'>\n <strong>{invalid.length === 1 ? strings.formSummaryOne : formatText(strings.formSummary, { count: invalid.length })}</strong>\n <ul>\n {invalid.map(name => <li key={name}>{wording(name, problems[name])}</li>)}\n {server.general.map(message => <li key={message}>{message}</li>)}\n </ul>\n </div>\n </div>\n )}\n {sections.map(section => (\n <fieldset key={section.id} className='foundation-form-section' disabled={false}>\n {section.title && <legend>{section.title}</legend>}\n <div className='foundation-form-grid' style={{ gridTemplateColumns: `repeat(${section.columns}, minmax(0, 1fr))` }} data-columns={section.columns}>\n {section.fields.map(field => (\n <FieldInput key={field.name} field={field} value={values[field.name]} error={errorOf(field.name)} readOnly={readOnly} locale={locale} required={strings.formRequired} choose={strings.formChoose}\n set={value => edit(field.name, value)} blur={() => setTouched(current => new Set(current).add(field.name))} />\n ))}\n </div>\n {mode === FormMode.Settings && !readOnly && (\n <div className='foundation-form-section-actions'>\n <ActionButton rule={canSave} emphasis='secondary' disabledReason={strings.disabledNoPermission} onClick={() => submit(section)}>{formatText(strings.formSectionSave, { section: section.title })}</ActionButton>\n </div>\n )}\n </fieldset>\n ))}\n {mode !== FormMode.Settings && mode !== FormMode.ReadOnly && (\n <div className='foundation-form-actions' role='group' aria-label={strings.listActions}>\n <span role='status' className='foundation-count'>{dirty ? strings.formUnsaved : justSaved ? strings.formSaved : ''}</span>\n <span className='foundation-wizard-spacer' />\n {dirty && <ActionButton emphasis='quiet' disabledReason={strings.disabledNoPermission} onClick={() => { setValues(saved); setTouched(new Set()); setSubmitted(false); }}>{strings.formDiscard}</ActionButton>}\n <ActionButton emphasis='secondary' disabledReason={strings.disabledNoPermission} onClick={() => interactions?.onClick?.({ stopPropagation: () => undefined })}>{strings.formCancel}</ActionButton>\n {mode === FormMode.Create && element.properties.saveAndNew !== false && <ActionButton rule={canSave} emphasis='secondary' disabledReason={strings.disabledNoPermission} onClick={() => { submit(); }}>{strings.formSaveAndNew}</ActionButton>}\n <ActionButton rule={canSave} disabledReason={strings.disabledNoPermission} onClick={() => submit()}>{strings.formSave}</ActionButton>\n </div>\n )}\n </form>\n )}\n </FoundationFrame>\n );\n}\n"],"names":["FieldInput","field","value","error","readOnly","locale","required","choose","set","blur","id","useId","describedBy","help","undefined","filter","Boolean","join","common","disabled","onBlur","text","String","input","type","FormFieldType","Toggle","_jsx","role","checked","onChange","event","target","Select","Lookup","_jsxs","select","option","options","map","MultiSelect","fieldset","className","aria-describedby","label","Array","isArray","includes","candidate","span","RichText","textarea","rows","placeholder","File","from","files","file","name","Address","lines","div","addressLines","line","aria-label","Number","Currency","inputMode","Password","autoComplete","Date","lang","grouped","style","gridColumn","data-invalid","title","htmlFor","FormScreenBody","element","interactions","bindingOutputs","sections","useMemo","readFormSections","properties","mode","readFormMode","suppliedValues","values","suppliedKey","JSON","stringify","saved","setSaved","useState","setValues","touched","setTouched","Set","submitted","setSubmitted","justSaved","setJustSaved","summary","useRef","strings","readFoundationStrings","readLocale","state","readComponentState","length","FormMode","ReadOnly","readPermissionRule","canSave","problems","validate","server","mapServerErrors","errors","dirty","sameValues","labelOf","flatMap","section","fields","find","wording","kind","formatText","formRequiredField","formInvalidField","errorOf","byField","has","invalid","Object","keys","useEffect","useValueOutput","window","guard","preventDefault","returnValue","addEventListener","removeEventListener","submit","scope","scoped","requestAnimationFrame","current","focus","onClick","stopPropagation","edit","FoundationFrame","skeleton","ComponentState","Loading","form","noValidate","onSubmit","Settings","p","formReadOnly","general","ref","tabIndex","data-tone","FoundationIcon","strong","formSummaryOne","formSummary","count","ul","li","message","legend","gridTemplateColumns","columns","data-columns","formRequired","formChoose","add","ActionButton","rule","emphasis","disabledReason","disabledNoPermission","formSectionSave","listActions","formUnsaved","formSaved","formDiscard","formCancel","Create","saveAndNew","formSaveAndNew","formSave"],"mappings":"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"}
|