From e72b193f068d75e34f49a13dc19e9bf6d92ed014 Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle <139135120+andrewwallacespeckle@users.noreply.github.com> Date: Fri, 10 May 2024 14:04:11 +0200 Subject: [PATCH] feat(fe2): move settings to tab on projects page (#2207) * Add settings tab. Update style of component * Structuring of files/components * Updates to TexInput * Add RadioGroup * Last FE work * FE Updates * Webhooks Settings Tab * Styling updates to webhooks * Title/Description Update * General Page done * Collaborators WIP * Styling updates * Add custom message to updateProject * Radio Group Same Height * Styling updates to radio group. Disabled state * Updates pre demo * Updates to icons & post demo changes * Major Updates * Unsaved Changes Dialog * Routing WIP * Remove StatsBlock * Auto update discussions on Private * Routing/Redirects * New input style * Invite Dialog * Fix mobile radiogroup * Mobile Improvements * Fix console warning * Fix build * Disabled States * Fix console * Unhide webhooks * Updates from testing * Responsive fixes * Alignment fixes * Fix textarea mobile height * Updates to GraphQL Fragments * Fix disabled state * WIP Arrows for scroll * Update PageTabs - broken * Fix to PageTabs * PageTab fix initial scroll * Hide Scrollbar * Better underline method * Fix mobile initial underline * Webhooks Empty State * Fix input border * Fix empty state * Input Styling updates * Remove mobile smaller text * Update disabled state for disabled items * Updates disabled sates on Settings Block * Fix build. Disable Invite * Fixes to invite permissions * Disable role select when invite is disabled * Small alignment fix * Fix webhooks empty state * cleaning up unnecessary vue files * story improvement * Remove DisabledMessage prop * Fix disabled prop on Button * Move team to Leave Fragment * Remove unused Disabled Message props * Add limit to graphql query * Updates to BlockDiscussions * add formatTriggers function to webhooks * Remove md from button. Improved switch * Update RadioGroup.stories.ts * Update RadioGroup to use defineModel * Various styling and copy updates - More concise and accurate copy - More readable - Works better on mobile * Updates to Invite Dialog * Custom success Message * Update slot names * Remove md in TextInput. Set h-8 to default * Changes from call with fabs * Replace isOwner with composable * Set SettingsBlock icon as optional * Comments from PR * Updates from PR * Final Tidy Ups * Fix Title/Description * Fix spacing issue on Webhooks page * Update borders and colors to align with Automate Makes the same changes that I recently made to the unreleased Automate tab * WEB-869 * Improve styling of radiogroup component Better borders, hover effect, bigger checkmark icon, more subtle active background color, same across breakpoints. * Adjust border styling of RadioGroup component * Improve circle around checkmark in RadioGroup * Split Tabs into 2 components * Restyle overflow arrows * Adjust gap and remove icons from vertical nav Too many icons on the screen got distracting. * Ensure active item visible * Increase gap on vertical nav * Update copy for Access and Discussions settings * Input Tidyup * WEB-877 update-collaborators-block * Update inputs to new style * Fix webhooks button hover state * Fix comment copy Appears in the access settings before embedding a model * Remove hover shadow from search input on Dashboard * Small change from Benjamin * Change collaborators permissions copy * Comments from PR #1 * Comments from PR #2 * Fix condition for EditableHeader * Updates from CR --------- Co-authored-by: Kristaps Fabians Geikins Co-authored-by: Benjamin Ottensten --- .../common/EditableTitleDescription.vue | 4 +- .../components/form/select/ServerRoles.vue | 1 + .../components/project/VisibilitySelect.vue | 2 +- .../components/project/model-page/Header.vue | 2 +- .../project/model-page/dialog/MoveTo.vue | 61 +++-- .../components/project/page/Header.vue | 2 +- .../InviteUser.vue => InviteDialog.vue} | 71 +++-- .../components/project/page/StatsBlock.vue | 2 +- .../project/page/latest-items/Comments.vue | 80 ------ .../project/page/latest-items/Models.vue | 176 ------------- .../project/page/models/NewDialog.vue | 4 +- .../project/page/settings/Block.vue | 62 +++++ .../settings/collaborators/Collaborators.vue | 162 ++++++++++++ .../project/page/settings/general/General.vue | 128 +++++++++ .../page/settings/general/block/Access.vue | 76 ++++++ .../settings/general/block/Delete/Delete.vue | 46 ++++ .../settings/general/block/Delete/Dialog.vue | 87 +++++++ .../settings/general/block/Discussions.vue | 95 +++++++ .../settings/general/block/Leave/Dialog.vue | 53 ++++ .../settings/general/block/Leave/Leave.vue | 64 +++++ .../settings/general/block/ProjectInfo.vue | 156 +++++++++++ .../settings/webhooks}/CreateOrEditDialog.vue | 5 +- .../settings/webhooks}/DeleteDialog.vue | 10 +- .../page/settings/webhooks/EmptyState.vue | 7 + .../page/settings/webhooks/Webhooks.vue | 243 ++++++++++++++++++ .../project/page/stats-block/Comments.vue | 33 --- .../project/page/stats-block/Models.vue | 33 --- .../project/page/stats-block/Settings.vue | 114 -------- .../project/page/stats-block/Versions.vue | 33 --- .../components/project/page/team/Block.vue | 39 +++ .../components/project/page/team/Dialog.vue | 26 +- .../project/page/team/dialog/DangerZones.vue | 134 ---------- .../page/team/dialog/ManagePermissions.vue | 6 +- .../project/page/team/dialog/ManageUsers.vue | 134 ---------- .../components/projects/Dashboard.vue | 2 +- .../server-management/InviteDialog.vue | 4 +- .../server-management/SettingsDialog.vue | 9 +- .../user/profile/EditDialog/Bio.vue | 2 + .../viewer/resources/add-model/Dialog.vue | 22 +- .../lib/common/generated/gql/gql.ts | 80 ++++-- .../lib/common/generated/gql/graphql.ts | 80 ++++-- .../frontend-2/lib/common/helpers/route.ts | 10 +- .../projects/composables/projectManagement.ts | 13 +- .../lib/projects/composables/team.ts | 68 +++-- .../lib/projects/graphql/fragments.ts | 44 ++++ .../lib/projects/helpers/components.ts | 2 +- .../frontend-2/pages/projects/[id]/index.vue | 69 +++-- .../pages/projects/[id]/index/settings.vue | 79 ++++++ .../[id]/index/settings/collaborators.vue | 3 + .../projects/[id]/index/settings/index.vue | 3 + .../projects/[id]/index/settings/webhooks.vue | 3 + .../[id]/{webhooks => old-webhooks}/index.vue | 0 .../src/components/form/RadioGroup.stories.ts | 77 ++++++ .../src/components/form/RadioGroup.vue | 93 +++++++ .../src/components/form/TextArea.vue | 2 +- .../src/components/form/TextInput.stories.ts | 4 + .../src/components/form/TextInput.vue | 3 +- .../src/components/form/select/Base.vue | 23 +- .../src/components/layout/Dialog.vue | 2 +- .../src/components/layout/PageTabs.stories.ts | 108 -------- .../src/components/layout/PageTabs.vue | 138 ---------- .../src/components/layout/Table.vue | 6 +- .../src/components/layout/Tabs.stories.ts | 38 --- .../src/components/layout/Tabs.vue | 37 --- .../layout/tabs/Horizontal.stories.ts | 67 +++++ .../src/components/layout/tabs/Horizontal.vue | 241 +++++++++++++++++ .../layout/tabs/Vertical.stories.ts | 67 +++++ .../src/components/layout/tabs/Vertical.vue | 107 ++++++++ .../src/composables/form/textInput.ts | 13 +- .../src/helpers/layout/components.ts | 5 +- packages/ui-components/src/lib.ts | 14 +- workspace.code-workspace | 4 +- 72 files changed, 2398 insertions(+), 1295 deletions(-) rename packages/frontend-2/components/project/page/{team/dialog/InviteUser.vue => InviteDialog.vue} (74%) delete mode 100644 packages/frontend-2/components/project/page/latest-items/Comments.vue delete mode 100644 packages/frontend-2/components/project/page/latest-items/Models.vue create mode 100644 packages/frontend-2/components/project/page/settings/Block.vue create mode 100644 packages/frontend-2/components/project/page/settings/collaborators/Collaborators.vue create mode 100644 packages/frontend-2/components/project/page/settings/general/General.vue create mode 100644 packages/frontend-2/components/project/page/settings/general/block/Access.vue create mode 100644 packages/frontend-2/components/project/page/settings/general/block/Delete/Delete.vue create mode 100644 packages/frontend-2/components/project/page/settings/general/block/Delete/Dialog.vue create mode 100644 packages/frontend-2/components/project/page/settings/general/block/Discussions.vue create mode 100644 packages/frontend-2/components/project/page/settings/general/block/Leave/Dialog.vue create mode 100644 packages/frontend-2/components/project/page/settings/general/block/Leave/Leave.vue create mode 100644 packages/frontend-2/components/project/page/settings/general/block/ProjectInfo.vue rename packages/frontend-2/components/project/{webhooks-page => page/settings/webhooks}/CreateOrEditDialog.vue (98%) rename packages/frontend-2/components/project/{webhooks-page => page/settings/webhooks}/DeleteDialog.vue (100%) create mode 100644 packages/frontend-2/components/project/page/settings/webhooks/EmptyState.vue create mode 100644 packages/frontend-2/components/project/page/settings/webhooks/Webhooks.vue delete mode 100644 packages/frontend-2/components/project/page/stats-block/Comments.vue delete mode 100644 packages/frontend-2/components/project/page/stats-block/Models.vue delete mode 100644 packages/frontend-2/components/project/page/stats-block/Settings.vue delete mode 100644 packages/frontend-2/components/project/page/stats-block/Versions.vue create mode 100644 packages/frontend-2/components/project/page/team/Block.vue delete mode 100644 packages/frontend-2/components/project/page/team/dialog/DangerZones.vue delete mode 100644 packages/frontend-2/components/project/page/team/dialog/ManageUsers.vue create mode 100644 packages/frontend-2/pages/projects/[id]/index/settings.vue create mode 100644 packages/frontend-2/pages/projects/[id]/index/settings/collaborators.vue create mode 100644 packages/frontend-2/pages/projects/[id]/index/settings/index.vue create mode 100644 packages/frontend-2/pages/projects/[id]/index/settings/webhooks.vue rename packages/frontend-2/pages/projects/[id]/{webhooks => old-webhooks}/index.vue (100%) create mode 100644 packages/ui-components/src/components/form/RadioGroup.stories.ts create mode 100644 packages/ui-components/src/components/form/RadioGroup.vue delete mode 100644 packages/ui-components/src/components/layout/PageTabs.stories.ts delete mode 100644 packages/ui-components/src/components/layout/PageTabs.vue delete mode 100644 packages/ui-components/src/components/layout/Tabs.stories.ts delete mode 100644 packages/ui-components/src/components/layout/Tabs.vue create mode 100644 packages/ui-components/src/components/layout/tabs/Horizontal.stories.ts create mode 100644 packages/ui-components/src/components/layout/tabs/Horizontal.vue create mode 100644 packages/ui-components/src/components/layout/tabs/Vertical.stories.ts create mode 100644 packages/ui-components/src/components/layout/tabs/Vertical.vue diff --git a/packages/frontend-2/components/common/EditableTitleDescription.vue b/packages/frontend-2/components/common/EditableTitleDescription.vue index 46df5cc0e..12c294a3a 100644 --- a/packages/frontend-2/components/common/EditableTitleDescription.vue +++ b/packages/frontend-2/components/common/EditableTitleDescription.vue @@ -27,7 +27,7 @@ @@ -65,7 +65,7 @@
diff --git a/packages/frontend-2/components/form/select/ServerRoles.vue b/packages/frontend-2/components/form/select/ServerRoles.vue index 459db1227..d95151d52 100644 --- a/packages/frontend-2/components/form/select/ServerRoles.vue +++ b/packages/frontend-2/components/form/select/ServerRoles.vue @@ -10,6 +10,7 @@ :fully-control-value="fullyControlValue" :label-id="labelId" :button-id="buttonId" + mount-menu-on-body >
- - - - + + +
diff --git a/packages/frontend-2/components/project/page/latest-items/Models.vue b/packages/frontend-2/components/project/page/latest-items/Models.vue deleted file mode 100644 index a76351571..000000000 --- a/packages/frontend-2/components/project/page/latest-items/Models.vue +++ /dev/null @@ -1,176 +0,0 @@ - - diff --git a/packages/frontend-2/components/project/page/models/NewDialog.vue b/packages/frontend-2/components/project/page/models/NewDialog.vue index b6415a29d..a069868f0 100644 --- a/packages/frontend-2/components/project/page/models/NewDialog.vue +++ b/packages/frontend-2/components/project/page/models/NewDialog.vue @@ -7,9 +7,10 @@ >
-
+
+
+
+
+ +

{{ title }}

+
+
+ +
+
+
+ +
+
+ +
+
+
+ + + You must be a project owner to edit project details + +
+
+
+ +
+
+
+ + diff --git a/packages/frontend-2/components/project/page/settings/collaborators/Collaborators.vue b/packages/frontend-2/components/project/page/settings/collaborators/Collaborators.vue new file mode 100644 index 000000000..840596ded --- /dev/null +++ b/packages/frontend-2/components/project/page/settings/collaborators/Collaborators.vue @@ -0,0 +1,162 @@ + + diff --git a/packages/frontend-2/components/project/page/settings/general/General.vue b/packages/frontend-2/components/project/page/settings/general/General.vue new file mode 100644 index 000000000..1c0eaca28 --- /dev/null +++ b/packages/frontend-2/components/project/page/settings/general/General.vue @@ -0,0 +1,128 @@ + + diff --git a/packages/frontend-2/components/project/page/settings/general/block/Access.vue b/packages/frontend-2/components/project/page/settings/general/block/Access.vue new file mode 100644 index 000000000..da87c0469 --- /dev/null +++ b/packages/frontend-2/components/project/page/settings/general/block/Access.vue @@ -0,0 +1,76 @@ + + + diff --git a/packages/frontend-2/components/project/page/settings/general/block/Delete/Delete.vue b/packages/frontend-2/components/project/page/settings/general/block/Delete/Delete.vue new file mode 100644 index 000000000..af9b31db6 --- /dev/null +++ b/packages/frontend-2/components/project/page/settings/general/block/Delete/Delete.vue @@ -0,0 +1,46 @@ + + + diff --git a/packages/frontend-2/components/project/page/settings/general/block/Delete/Dialog.vue b/packages/frontend-2/components/project/page/settings/general/block/Delete/Dialog.vue new file mode 100644 index 000000000..61d77a718 --- /dev/null +++ b/packages/frontend-2/components/project/page/settings/general/block/Delete/Dialog.vue @@ -0,0 +1,87 @@ + + + diff --git a/packages/frontend-2/components/project/page/settings/general/block/Discussions.vue b/packages/frontend-2/components/project/page/settings/general/block/Discussions.vue new file mode 100644 index 000000000..cc544a331 --- /dev/null +++ b/packages/frontend-2/components/project/page/settings/general/block/Discussions.vue @@ -0,0 +1,95 @@ + + + diff --git a/packages/frontend-2/components/project/page/settings/general/block/Leave/Dialog.vue b/packages/frontend-2/components/project/page/settings/general/block/Leave/Dialog.vue new file mode 100644 index 000000000..546f180a3 --- /dev/null +++ b/packages/frontend-2/components/project/page/settings/general/block/Leave/Dialog.vue @@ -0,0 +1,53 @@ + + + diff --git a/packages/frontend-2/components/project/page/settings/general/block/Leave/Leave.vue b/packages/frontend-2/components/project/page/settings/general/block/Leave/Leave.vue new file mode 100644 index 000000000..e2339d949 --- /dev/null +++ b/packages/frontend-2/components/project/page/settings/general/block/Leave/Leave.vue @@ -0,0 +1,64 @@ + + + diff --git a/packages/frontend-2/components/project/page/settings/general/block/ProjectInfo.vue b/packages/frontend-2/components/project/page/settings/general/block/ProjectInfo.vue new file mode 100644 index 000000000..373eec609 --- /dev/null +++ b/packages/frontend-2/components/project/page/settings/general/block/ProjectInfo.vue @@ -0,0 +1,156 @@ + + + diff --git a/packages/frontend-2/components/project/webhooks-page/CreateOrEditDialog.vue b/packages/frontend-2/components/project/page/settings/webhooks/CreateOrEditDialog.vue similarity index 98% rename from packages/frontend-2/components/project/webhooks-page/CreateOrEditDialog.vue rename to packages/frontend-2/components/project/page/settings/webhooks/CreateOrEditDialog.vue index da9c7839f..535b7f609 100644 --- a/packages/frontend-2/components/project/webhooks-page/CreateOrEditDialog.vue +++ b/packages/frontend-2/components/project/page/settings/webhooks/CreateOrEditDialog.vue @@ -9,7 +9,7 @@ {{ props.webhook ? 'Edit Webhook' : 'Create Webhook' }} -
+
{ } const dialogButtons = [ - { - text: 'Delete', - props: { color: 'danger', fullWidth: true }, - onClick: deleteConfirmed - }, { text: 'Cancel', props: { color: 'secondary', fullWidth: true, outline: true }, onClick: () => (isOpen.value = false) + }, + { + text: 'Delete', + props: { color: 'danger', fullWidth: true }, + onClick: deleteConfirmed } ] diff --git a/packages/frontend-2/components/project/page/settings/webhooks/EmptyState.vue b/packages/frontend-2/components/project/page/settings/webhooks/EmptyState.vue new file mode 100644 index 000000000..b50eb4593 --- /dev/null +++ b/packages/frontend-2/components/project/page/settings/webhooks/EmptyState.vue @@ -0,0 +1,7 @@ + diff --git a/packages/frontend-2/components/project/page/settings/webhooks/Webhooks.vue b/packages/frontend-2/components/project/page/settings/webhooks/Webhooks.vue new file mode 100644 index 000000000..b29e26746 --- /dev/null +++ b/packages/frontend-2/components/project/page/settings/webhooks/Webhooks.vue @@ -0,0 +1,243 @@ + + diff --git a/packages/frontend-2/components/project/page/stats-block/Comments.vue b/packages/frontend-2/components/project/page/stats-block/Comments.vue deleted file mode 100644 index e9b45958a..000000000 --- a/packages/frontend-2/components/project/page/stats-block/Comments.vue +++ /dev/null @@ -1,33 +0,0 @@ - - diff --git a/packages/frontend-2/components/project/page/stats-block/Models.vue b/packages/frontend-2/components/project/page/stats-block/Models.vue deleted file mode 100644 index 4039476db..000000000 --- a/packages/frontend-2/components/project/page/stats-block/Models.vue +++ /dev/null @@ -1,33 +0,0 @@ - - diff --git a/packages/frontend-2/components/project/page/stats-block/Settings.vue b/packages/frontend-2/components/project/page/stats-block/Settings.vue deleted file mode 100644 index aad81240c..000000000 --- a/packages/frontend-2/components/project/page/stats-block/Settings.vue +++ /dev/null @@ -1,114 +0,0 @@ - - diff --git a/packages/frontend-2/components/project/page/stats-block/Versions.vue b/packages/frontend-2/components/project/page/stats-block/Versions.vue deleted file mode 100644 index 4d35a421d..000000000 --- a/packages/frontend-2/components/project/page/stats-block/Versions.vue +++ /dev/null @@ -1,33 +0,0 @@ - - diff --git a/packages/frontend-2/components/project/page/team/Block.vue b/packages/frontend-2/components/project/page/team/Block.vue new file mode 100644 index 000000000..8f10744ff --- /dev/null +++ b/packages/frontend-2/components/project/page/team/Block.vue @@ -0,0 +1,39 @@ + + diff --git a/packages/frontend-2/components/project/page/team/Dialog.vue b/packages/frontend-2/components/project/page/team/Dialog.vue index ad3a34c6e..a9c8f7eb5 100644 --- a/packages/frontend-2/components/project/page/team/Dialog.vue +++ b/packages/frontend-2/components/project/page/team/Dialog.vue @@ -1,32 +1,12 @@ diff --git a/packages/frontend-2/components/project/page/team/dialog/ManagePermissions.vue b/packages/frontend-2/components/project/page/team/dialog/ManagePermissions.vue index ce4e1e5e9..b617f0634 100644 --- a/packages/frontend-2/components/project/page/team/dialog/ManagePermissions.vue +++ b/packages/frontend-2/components/project/page/team/dialog/ManagePermissions.vue @@ -63,9 +63,9 @@ const props = defineProps<{ defaultOpen: boolean }>() -const { isOwner, isServerGuest } = useTeamManagePermissionsInternals({ - props: toRefs(props) -}) +const projectRef = toRef(props, 'project') +const { isOwner, isServerGuest } = useTeamManagePermissionsInternals(projectRef) + const updateProject = useUpdateProject() const loading = ref(false) diff --git a/packages/frontend-2/components/project/page/team/dialog/ManageUsers.vue b/packages/frontend-2/components/project/page/team/dialog/ManageUsers.vue deleted file mode 100644 index 9310950c6..000000000 --- a/packages/frontend-2/components/project/page/team/dialog/ManageUsers.vue +++ /dev/null @@ -1,134 +0,0 @@ - - diff --git a/packages/frontend-2/components/projects/Dashboard.vue b/packages/frontend-2/components/projects/Dashboard.vue index b1b5a07d5..be8ae83f3 100644 --- a/packages/frontend-2/components/projects/Dashboard.vue +++ b/packages/frontend-2/components/projects/Dashboard.vue @@ -34,7 +34,7 @@ :show-label="false" placeholder="Search" color="foundation" - wrapper-classes="grow md:grow-0 md:w-60 hover:shadow rounded-md outline outline-2 outline-primary-muted" + wrapper-classes="grow md:grow-0 md:w-60" :show-clear="!!search" @change="updateSearchImmediately" @update:model-value="updateDebouncedSearch" diff --git a/packages/frontend-2/components/server-management/InviteDialog.vue b/packages/frontend-2/components/server-management/InviteDialog.vue index 465eb89e6..ff036b943 100644 --- a/packages/frontend-2/components/server-management/InviteDialog.vue +++ b/packages/frontend-2/components/server-management/InviteDialog.vue @@ -3,7 +3,7 @@
-

+

Speckle will send a server invite link to the email(-s) below. You can also add a personal message if you want to. To add multiple e-mails, seperate them with commas. @@ -13,6 +13,7 @@ -

+
- - - - + + +
diff --git a/packages/frontend-2/pages/projects/[id]/index/settings/collaborators.vue b/packages/frontend-2/pages/projects/[id]/index/settings/collaborators.vue new file mode 100644 index 000000000..d88e4c4cd --- /dev/null +++ b/packages/frontend-2/pages/projects/[id]/index/settings/collaborators.vue @@ -0,0 +1,3 @@ + diff --git a/packages/frontend-2/pages/projects/[id]/index/settings/index.vue b/packages/frontend-2/pages/projects/[id]/index/settings/index.vue new file mode 100644 index 000000000..613a761c5 --- /dev/null +++ b/packages/frontend-2/pages/projects/[id]/index/settings/index.vue @@ -0,0 +1,3 @@ + diff --git a/packages/frontend-2/pages/projects/[id]/index/settings/webhooks.vue b/packages/frontend-2/pages/projects/[id]/index/settings/webhooks.vue new file mode 100644 index 000000000..56b94337a --- /dev/null +++ b/packages/frontend-2/pages/projects/[id]/index/settings/webhooks.vue @@ -0,0 +1,3 @@ + diff --git a/packages/frontend-2/pages/projects/[id]/webhooks/index.vue b/packages/frontend-2/pages/projects/[id]/old-webhooks/index.vue similarity index 100% rename from packages/frontend-2/pages/projects/[id]/webhooks/index.vue rename to packages/frontend-2/pages/projects/[id]/old-webhooks/index.vue diff --git a/packages/ui-components/src/components/form/RadioGroup.stories.ts b/packages/ui-components/src/components/form/RadioGroup.stories.ts new file mode 100644 index 000000000..11ced17b8 --- /dev/null +++ b/packages/ui-components/src/components/form/RadioGroup.stories.ts @@ -0,0 +1,77 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import RadioGroup from './RadioGroup.vue' +import { ChartBarIcon, WrenchIcon, WalletIcon } from '@heroicons/vue/24/outline' +import type { ConcreteComponent } from 'vue' +import { useStorybookVmodel } from '~~/src/composables/testing' // Adjust this path to match your project structure + +type RadioGroupStoryType = StoryObj<{ + 'update:modelValue'?: (val: string) => void + modelValue: string + options: Array<{ + value: string + title: string + introduction: string + icon: ConcreteComponent + help?: string + }> +}> + +export default { + title: 'Components/Form/RadioGroup', + component: RadioGroup, + argTypes: { + 'update:modelValue': { + action: 'update:modelValue', + type: 'function' + } + }, + parameters: { + docs: { + description: { + component: + 'A customizable radio group component with titles, icons, and introductions for each option.' + } + } + } +} as Meta + +export const Default: RadioGroupStoryType = { + render: (args, { ...ctx }) => ({ + components: { RadioGroup }, + setup() { + // Use the custom composable to create a two-way binding and log actions + const { model } = useStorybookVmodel({ args, prop: 'modelValue', ctx }) + return { args, model } + }, + template: ` +
+ +
+ ` + }), + args: { + modelValue: 'option1', + options: [ + { + value: 'option1', + title: 'Option 1', + introduction: 'Introduction for Option 1', + icon: ChartBarIcon + }, + { + value: 'option2', + title: 'Option 2', + introduction: 'Introduction for Option 2', + icon: WalletIcon + }, + { + value: 'option3', + title: 'Option 3', + introduction: + 'Introduction for Option 3 but a bit longer so it drops onto 2 lines', + icon: WrenchIcon, + help: 'This is an example helper' + } + ] + } +} diff --git a/packages/ui-components/src/components/form/RadioGroup.vue b/packages/ui-components/src/components/form/RadioGroup.vue new file mode 100644 index 000000000..6cf92a6cb --- /dev/null +++ b/packages/ui-components/src/components/form/RadioGroup.vue @@ -0,0 +1,93 @@ + + + diff --git a/packages/ui-components/src/components/form/TextArea.vue b/packages/ui-components/src/components/form/TextArea.vue index 012665c4a..a8b9f74e0 100644 --- a/packages/ui-components/src/components/form/TextArea.vue +++ b/packages/ui-components/src/components/form/TextArea.vue @@ -13,7 +13,7 @@ coreClasses, iconClasses, textareaClasses || '', - 'min-h-[3rem] simple-scrollbar text-sm' + 'min-h-[6rem] sm:min-h-[3rem] simple-scrollbar text-sm' ]" :placeholder="placeholder" :disabled="disabled" diff --git a/packages/ui-components/src/components/form/TextInput.stories.ts b/packages/ui-components/src/components/form/TextInput.stories.ts index 75b544400..22cb818d4 100644 --- a/packages/ui-components/src/components/form/TextInput.stories.ts +++ b/packages/ui-components/src/components/form/TextInput.stories.ts @@ -31,6 +31,10 @@ export default { 'update:modelValue': { type: 'function', action: 'v-model' + }, + size: { + control: { type: 'select' }, + options: ['sm', 'lg', 'base', 'xl'] } } } as Meta diff --git a/packages/ui-components/src/components/form/TextInput.vue b/packages/ui-components/src/components/form/TextInput.vue index 043c46c47..ea3e45fab 100644 --- a/packages/ui-components/src/components/form/TextInput.vue +++ b/packages/ui-components/src/components/form/TextInput.vue @@ -2,6 +2,7 @@
diff --git a/packages/ui-components/src/components/form/select/Base.vue b/packages/ui-components/src/components/form/select/Base.vue index 47ca9f62a..5791a1cd1 100644 --- a/packages/ui-components/src/components/form/select/Base.vue +++ b/packages/ui-components/src/components/form/select/Base.vue @@ -11,11 +11,12 @@ > {{ label }} +
*
@@ -47,7 +48,7 @@ aria-hidden="true" />
* @@ -64,6 +65,8 @@ />
+ + @@ -171,12 +174,7 @@
-

+

{{ helpTip }}

@@ -421,6 +419,7 @@ const currentItems = ref([]) as Ref const isAsyncLoading = ref(false) const forceUpdateKey = ref(1) const internalHelpTipId = ref(nanoid()) +const isOpen = ref(false) const listboxButtonBounding = useElementBounding( computed(() => listboxButton.value?.el), @@ -466,8 +465,12 @@ const buttonsWrapperClasses = computed(() => { classParts.push('outline outline-2 outline-danger') } } else if (props.buttonStyle !== 'simple') { - classParts.push('hover:shadow rounded-md') - classParts.push('outline outline-2 outline-primary-muted') + classParts.push('rounded-md border') + if (isOpen.value) { + classParts.push('border-outline-1') + } else { + classParts.push('border-outline-3') + } } if (props.fixedHeight) { diff --git a/packages/ui-components/src/components/layout/Dialog.vue b/packages/ui-components/src/components/layout/Dialog.vue index 7f1f453a3..908a715a9 100644 --- a/packages/ui-components/src/components/layout/Dialog.vue +++ b/packages/ui-components/src/components/layout/Dialog.vue @@ -56,7 +56,7 @@
diff --git a/packages/ui-components/src/components/layout/PageTabs.stories.ts b/packages/ui-components/src/components/layout/PageTabs.stories.ts deleted file mode 100644 index 4d91bbb64..000000000 --- a/packages/ui-components/src/components/layout/PageTabs.stories.ts +++ /dev/null @@ -1,108 +0,0 @@ -import type { Meta, StoryObj } from '@storybook/vue3' -import LayoutPageTabs from '~~/src/components/layout/PageTabs.vue' -import type { LayoutPageTabItem } from '~~/src/helpers/layout/components' -import { - CubeIcon, - Cog6ToothIcon, - BoltIcon, - ChatBubbleLeftRightIcon -} from '@heroicons/vue/24/outline' -import { useStorybookVmodel } from '~~/src/composables/testing' - -const items: LayoutPageTabItem[] = [ - { title: 'Models', id: 'models', icon: CubeIcon, count: 300 }, - { title: 'Discussions', id: 'discussions', icon: ChatBubbleLeftRightIcon }, - { title: 'Automations', id: 'automations', icon: BoltIcon, tag: 'New' }, - { title: 'Settings', id: 'settings', icon: Cog6ToothIcon } -] - -export default { - component: LayoutPageTabs, - parameters: { - docs: { - description: { - component: 'Page tabs component' - } - } - }, - argTypes: { - items: { - description: 'Array of items to display in the tab' - }, - title: { - description: 'Title of the tab' - }, - vertical: { - description: 'Whether to display the tabs vertically' - }, - activeItem: { - description: 'The active item model. Not required.' - }, - 'update:activeItem': { - description: 'Event emitted when the active item changes', - type: 'function', - action: 'v-model:activeItem' - } - } -} as Meta - -export const Default: StoryObj = { - render: (args, ctx) => ({ - components: { LayoutPageTabs }, - setup() { - const { model } = useStorybookVmodel({ args, prop: 'activeItem', ctx }) - return { args, model } - }, - template: ` -
- -
Title: {{ activeItem?.title }}
-
ID: {{ activeItem?.id }}
-
-
` - }), - args: { - items, - title: 'Settings', - activeItem: items[0] - } -} - -export const Vertical: StoryObj = { - ...Default, - args: { - ...Default.args, - vertical: true - } -} - -export const WithActiveItemModel: StoryObj = { - ...Default, - args: { - ...Default.args, - activeItem: items[2] - } -} - -export const WithActiveItemModelBlocked: StoryObj = { - ...WithActiveItemModel, - render: (args, ctx) => ({ - components: { LayoutPageTabs }, - setup() { - const { model } = useStorybookVmodel({ - args, - prop: 'activeItem', - ctx, - blockChanges: true - }) - return { args, model } - }, - template: ` -
- -
Title: {{ activeItem?.title }}
-
ID: {{ activeItem?.id }}
-
-
` - }) -} diff --git a/packages/ui-components/src/components/layout/PageTabs.vue b/packages/ui-components/src/components/layout/PageTabs.vue deleted file mode 100644 index f325c17af..000000000 --- a/packages/ui-components/src/components/layout/PageTabs.vue +++ /dev/null @@ -1,138 +0,0 @@ - - diff --git a/packages/ui-components/src/components/layout/Table.vue b/packages/ui-components/src/components/layout/Table.vue index 925a765ab..995baa636 100644 --- a/packages/ui-components/src/components/layout/Table.vue +++ b/packages/ui-components/src/components/layout/Table.vue @@ -1,9 +1,11 @@