@licklist/design 0.78.5-dev.69 → 0.78.5-dev.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/styles/themes/bookedit/_fonts.scss +2 -0
  2. package/dist/v2/components/ActionMenu/ActionMenu.d.ts.map +1 -1
  3. package/dist/v2/components/ActionMenu/ActionMenu.js +5 -3
  4. package/dist/v2/components/AvatarUpload/AvatarUpload.d.ts +12 -0
  5. package/dist/v2/components/AvatarUpload/AvatarUpload.d.ts.map +1 -0
  6. package/dist/v2/components/AvatarUpload/index.d.ts +2 -0
  7. package/dist/v2/components/AvatarUpload/index.d.ts.map +1 -0
  8. package/dist/v2/components/Button/Button.d.ts +1 -1
  9. package/dist/v2/components/Button/Button.d.ts.map +1 -1
  10. package/dist/v2/components/Button/Button.scss.js +1 -1
  11. package/dist/v2/components/DataTable/DataTable.d.ts +41 -0
  12. package/dist/v2/components/DataTable/DataTable.d.ts.map +1 -0
  13. package/dist/v2/components/DataTable/index.d.ts +3 -0
  14. package/dist/v2/components/DataTable/index.d.ts.map +1 -0
  15. package/dist/v2/components/EmptyState/EmptyState.d.ts +14 -0
  16. package/dist/v2/components/EmptyState/EmptyState.d.ts.map +1 -0
  17. package/dist/v2/components/EmptyState/index.d.ts +3 -0
  18. package/dist/v2/components/EmptyState/index.d.ts.map +1 -0
  19. package/dist/v2/components/FormField/FormField.scss.js +1 -1
  20. package/dist/v2/components/InfoGrid/InfoGrid.d.ts +13 -0
  21. package/dist/v2/components/InfoGrid/InfoGrid.d.ts.map +1 -0
  22. package/dist/v2/components/InfoGrid/index.d.ts +2 -0
  23. package/dist/v2/components/InfoGrid/index.d.ts.map +1 -0
  24. package/dist/v2/components/NewTable/NewTable.scss.js +1 -1
  25. package/dist/v2/components/RadioCard/RadioCard.d.ts +17 -0
  26. package/dist/v2/components/RadioCard/RadioCard.d.ts.map +1 -0
  27. package/dist/v2/components/RadioCard/index.d.ts +2 -0
  28. package/dist/v2/components/RadioCard/index.d.ts.map +1 -0
  29. package/dist/v2/components/StatusBadge/StatusBadge.d.ts +8 -0
  30. package/dist/v2/components/StatusBadge/StatusBadge.d.ts.map +1 -0
  31. package/dist/v2/components/StatusBadge/index.d.ts +3 -0
  32. package/dist/v2/components/StatusBadge/index.d.ts.map +1 -0
  33. package/dist/v2/components/StepIndicator/StepIndicator.d.ts +9 -0
  34. package/dist/v2/components/StepIndicator/StepIndicator.d.ts.map +1 -0
  35. package/dist/v2/components/StepIndicator/index.d.ts +2 -0
  36. package/dist/v2/components/StepIndicator/index.d.ts.map +1 -0
  37. package/dist/v2/components/TableControls/TableControls.d.ts +28 -0
  38. package/dist/v2/components/TableControls/TableControls.d.ts.map +1 -0
  39. package/dist/v2/components/TableControls/index.d.ts +3 -0
  40. package/dist/v2/components/TableControls/index.d.ts.map +1 -0
  41. package/dist/v2/components/Tabs/Tabs.d.ts +15 -0
  42. package/dist/v2/components/Tabs/Tabs.d.ts.map +1 -0
  43. package/dist/v2/components/Tabs/index.d.ts +3 -0
  44. package/dist/v2/components/Tabs/index.d.ts.map +1 -0
  45. package/dist/v2/icons/index.d.ts +42 -0
  46. package/dist/v2/icons/index.d.ts.map +1 -1
  47. package/dist/v2/index.d.ts +18 -0
  48. package/dist/v2/index.d.ts.map +1 -1
  49. package/dist/v2/pages/CreateUser/CreateUserPage.d.ts +110 -0
  50. package/dist/v2/pages/CreateUser/CreateUserPage.d.ts.map +1 -0
  51. package/dist/v2/pages/CreateUser/index.d.ts +3 -0
  52. package/dist/v2/pages/CreateUser/index.d.ts.map +1 -0
  53. package/dist/v2/pages/RoleSelection/RoleSelectionPage.d.ts +26 -0
  54. package/dist/v2/pages/RoleSelection/RoleSelectionPage.d.ts.map +1 -0
  55. package/dist/v2/pages/RoleSelection/index.d.ts +3 -0
  56. package/dist/v2/pages/RoleSelection/index.d.ts.map +1 -0
  57. package/dist/v2/pages/UserDetails/UserDetailsPage.d.ts +37 -0
  58. package/dist/v2/pages/UserDetails/UserDetailsPage.d.ts.map +1 -0
  59. package/dist/v2/pages/UserDetails/index.d.ts +3 -0
  60. package/dist/v2/pages/UserDetails/index.d.ts.map +1 -0
  61. package/dist/v2/pages/auth/CreatePassword/CreatePasswordPage.d.ts.map +1 -1
  62. package/dist/v2/pages/auth/Login/LoginPage.d.ts.map +1 -1
  63. package/dist/v2/pages/auth/ResetPassword/ResetPasswordPage.d.ts.map +1 -1
  64. package/dist/v2/styles/components/Button.scss +27 -0
  65. package/package.json +2 -2
  66. package/src/styles/themes/bookedit/_fonts.scss +2 -0
  67. package/src/v2/components/ActionMenu/ActionMenu.tsx +4 -2
  68. package/src/v2/components/AvatarUpload/AvatarUpload.scss +68 -0
  69. package/src/v2/components/AvatarUpload/AvatarUpload.stories.tsx +83 -0
  70. package/src/v2/components/AvatarUpload/AvatarUpload.tsx +69 -0
  71. package/src/v2/components/AvatarUpload/index.ts +1 -0
  72. package/src/v2/components/Button/Button.tsx +1 -0
  73. package/src/v2/components/DataTable/DataTable.scss +181 -0
  74. package/src/v2/components/DataTable/DataTable.tsx +256 -0
  75. package/src/v2/components/DataTable/index.ts +7 -0
  76. package/src/v2/components/EmptyState/EmptyState.scss +39 -0
  77. package/src/v2/components/EmptyState/EmptyState.stories.tsx +45 -0
  78. package/src/v2/components/EmptyState/EmptyState.tsx +37 -0
  79. package/src/v2/components/EmptyState/index.ts +2 -0
  80. package/src/v2/components/FormField/FormField.scss +12 -0
  81. package/src/v2/components/InfoGrid/InfoGrid.scss +51 -0
  82. package/src/v2/components/InfoGrid/InfoGrid.stories.tsx +76 -0
  83. package/src/v2/components/InfoGrid/InfoGrid.tsx +28 -0
  84. package/src/v2/components/InfoGrid/index.ts +1 -0
  85. package/src/v2/components/NewTable/NewTable.scss +4 -4
  86. package/src/v2/components/RadioCard/RadioCard.scss +76 -0
  87. package/src/v2/components/RadioCard/RadioCard.stories.tsx +115 -0
  88. package/src/v2/components/RadioCard/RadioCard.tsx +68 -0
  89. package/src/v2/components/RadioCard/index.ts +1 -0
  90. package/src/v2/components/StatusBadge/StatusBadge.scss +53 -0
  91. package/src/v2/components/StatusBadge/StatusBadge.tsx +31 -0
  92. package/src/v2/components/StatusBadge/index.ts +2 -0
  93. package/src/v2/components/StepIndicator/StepIndicator.scss +62 -0
  94. package/src/v2/components/StepIndicator/StepIndicator.stories.tsx +37 -0
  95. package/src/v2/components/StepIndicator/StepIndicator.tsx +41 -0
  96. package/src/v2/components/StepIndicator/index.ts +1 -0
  97. package/src/v2/components/TableControls/TableControls.scss +63 -0
  98. package/src/v2/components/TableControls/TableControls.tsx +110 -0
  99. package/src/v2/components/TableControls/index.ts +7 -0
  100. package/src/v2/components/Tabs/Tabs.scss +36 -0
  101. package/src/v2/components/Tabs/Tabs.stories.tsx +75 -0
  102. package/src/v2/components/Tabs/Tabs.tsx +52 -0
  103. package/src/v2/components/Tabs/index.ts +2 -0
  104. package/src/v2/icons/index.tsx +219 -0
  105. package/src/v2/index.ts +98 -0
  106. package/src/v2/pages/CreateUser/CreateUserPage.scss +760 -0
  107. package/src/v2/pages/CreateUser/CreateUserPage.stories.tsx +157 -0
  108. package/src/v2/pages/CreateUser/CreateUserPage.tsx +1062 -0
  109. package/src/v2/pages/CreateUser/index.ts +13 -0
  110. package/src/v2/pages/RoleSelection/RoleSelectionPage.scss +193 -0
  111. package/src/v2/pages/RoleSelection/RoleSelectionPage.stories.tsx +112 -0
  112. package/src/v2/pages/RoleSelection/RoleSelectionPage.tsx +127 -0
  113. package/src/v2/pages/RoleSelection/index.ts +2 -0
  114. package/src/v2/pages/UserDetails/UserDetailsPage.scss +236 -0
  115. package/src/v2/pages/UserDetails/UserDetailsPage.stories.tsx +84 -0
  116. package/src/v2/pages/UserDetails/UserDetailsPage.tsx +210 -0
  117. package/src/v2/pages/UserDetails/index.ts +2 -0
  118. package/src/v2/pages/auth/AuthLayout/AuthLayout.scss +8 -6
  119. package/src/v2/pages/auth/CreatePassword/CreatePasswordPage.tsx +1 -3
  120. package/src/v2/pages/auth/Login/LoginPage.tsx +1 -3
  121. package/src/v2/pages/auth/ResetPassword/ResetPasswordPage.scss +2 -0
  122. package/src/v2/pages/auth/ResetPassword/ResetPasswordPage.tsx +1 -2
  123. package/src/v2/styles/components/Button.scss +27 -0
@@ -0,0 +1,157 @@
1
+ import React from 'react'
2
+ import type { Meta, StoryObj } from '@storybook/react'
3
+ import { CreateUserPage } from './CreateUserPage'
4
+ import type { ExistingUser, EntityResult, VenueAssignment } from './CreateUserPage'
5
+
6
+ // ─── Mock data ────────────────────────────────────────────────────────────────
7
+
8
+ const mockExistingUser: ExistingUser = {
9
+ id: 'usr-001',
10
+ fullName: 'Jane Smith',
11
+ email: 'jane.smith@example.com',
12
+ userNumber: 1042,
13
+ assignments: [
14
+ { id: 'venue-001', name: 'The Grand Arena', type: 'venue', friendlyId: 'V-10203', role: 'admin' },
15
+ { id: 'company-001', name: 'Events Co.', type: 'company', friendlyId: 'C-7890', role: 'manager' },
16
+ ],
17
+ }
18
+
19
+ const mockEntityResults: EntityResult[] = [
20
+ { id: 'venue-002', name: 'Sunset Pavilion', type: 'venue', friendlyId: 'V-20101' },
21
+ { id: 'company-002', name: 'Live Events Group', type: 'company', friendlyId: 'C-5501' },
22
+ { id: 'venue-003', name: 'City Bowl Stadium', type: 'venue', friendlyId: 'V-30302' },
23
+ ]
24
+
25
+ const mockNestedProviders: EntityResult[] = [
26
+ { id: 'venue-004', name: 'North Wing Venue', type: 'venue', friendlyId: 'V-40101' },
27
+ { id: 'venue-005', name: 'South Hall', type: 'venue', friendlyId: 'V-40202' },
28
+ { id: 'promo-001', name: 'Live Events Promoter', type: 'promoter', friendlyId: 'P-40303' },
29
+ ]
30
+
31
+ const mockVenues: VenueAssignment[] = [
32
+ { id: 'venue-101', name: 'Main Arena', type: 'venue', friendlyId: 'V-1001', role: 'admin', selected: true },
33
+ { id: 'venue-102', name: 'North Pavilion', type: 'venue', friendlyId: 'V-1002', role: 'admin', selected: true },
34
+ { id: 'venue-103', name: 'South Court', type: 'venue', friendlyId: 'V-1003', role: 'admin', selected: false },
35
+ { id: 'promo-101', name: 'Events Promoter', type: 'promoter', friendlyId: 'P-1001', role: 'admin', selected: true },
36
+ ]
37
+
38
+ // ─── Shared mock handlers ────────────────────────────────────────────────────
39
+
40
+ /** Type "existing" in the email field to trigger the existing-user path */
41
+ async function checkEmail(email: string): Promise<ExistingUser | null> {
42
+ await delay(600)
43
+ return email.toLowerCase().includes('existing') ? mockExistingUser : null
44
+ }
45
+
46
+ async function searchEntities(query: string): Promise<EntityResult[]> {
47
+ await delay(400)
48
+ return mockEntityResults.filter((e) => e.name.toLowerCase().includes(query.toLowerCase()))
49
+ }
50
+
51
+ async function fetchCompanyProviders(): Promise<EntityResult[]> {
52
+ await delay(300)
53
+ return mockNestedProviders
54
+ }
55
+
56
+ async function fetchCompanyVenues(): Promise<VenueAssignment[]> {
57
+ await delay(300)
58
+ return mockVenues
59
+ }
60
+
61
+ function delay(ms: number) {
62
+ return new Promise<void>((r) => setTimeout(r, ms))
63
+ }
64
+
65
+ // ─── Meta ─────────────────────────────────────────────────────────────────────
66
+
67
+ const meta: Meta<typeof CreateUserPage> = {
68
+ title: 'v2/Pages/CreateUser',
69
+ component: CreateUserPage,
70
+ parameters: { layout: 'fullscreen' },
71
+ }
72
+
73
+ export default meta
74
+ type Story = StoryObj<typeof CreateUserPage>
75
+
76
+ // ─── Stories — one per real entry context ────────────────────────────────────
77
+
78
+ /**
79
+ * **Admin Panel** — `/admin/users/add`
80
+ *
81
+ * A super or system admin adds any kind of user to the platform.
82
+ *
83
+ * Flow:
84
+ * - Email → Name → **Role selection** (Super Admin / System Admin / Provider User)
85
+ * - If Provider User: → Search & select companies/venues → Set role per entity → Create User
86
+ * - If Super/System Admin: → Send Invitation
87
+ * - If existing email: → Existing user card → View User (flow ends)
88
+ *
89
+ * Try typing "existing" in the email field to trigger the existing-user path.
90
+ * Try searching "sunset" or "city" on the Providers step.
91
+ */
92
+ export const AdminPanel: Story = {
93
+ name: 'Admin Panel',
94
+ args: {
95
+ mode: 'admin-panel',
96
+ onCheckEmail: checkEmail,
97
+ onSearchEntities: searchEntities,
98
+ onFetchCompanyProviders: fetchCompanyProviders,
99
+ onInviteUser: async (data) => { await delay(1000); console.log('Invite sent:', data) },
100
+ onViewUser: (id) => console.log('Navigate to user:', id),
101
+ onCancel: () => console.log('Cancel'),
102
+ },
103
+ }
104
+
105
+ /**
106
+ * **Provider Team** — `/venue|promoter/{id}/settings/team-settings/add`
107
+ *
108
+ * A provider admin adds a team member to their single provider.
109
+ *
110
+ * Flow:
111
+ * - Email → Name (new) or User card (existing) → **Role selection** (provider roles) → Send Invitation / Add User
112
+ *
113
+ * The role is always chosen inside the wizard — there is no pre-selection.
114
+ * Try typing "existing" in the email field to see the existing-user card path.
115
+ */
116
+ export const ProviderTeam: Story = {
117
+ name: 'Provider Team',
118
+ args: {
119
+ mode: 'provider-team',
120
+ entityContext: {
121
+ id: 'venue-001',
122
+ name: 'The Grand Arena',
123
+ type: 'venue',
124
+ },
125
+ onCheckEmail: checkEmail,
126
+ onInviteUser: async (data) => { await delay(1000); console.log('Invite sent:', data) },
127
+ onCancel: () => console.log('Cancel'),
128
+ },
129
+ }
130
+
131
+ /**
132
+ * **Company Team** — `/company/{id}/settings/team/add`
133
+ *
134
+ * A company admin adds a team member, choosing which venues to grant access to
135
+ * and setting a role for each.
136
+ *
137
+ * Flow:
138
+ * - Email → Name (new) or User card (existing) → **Venue & company access selection** → Set role per entity → Send Invitation / Add User
139
+ *
140
+ * The venues are pre-loaded from the company context (some pre-selected, some not).
141
+ * Try typing "existing" in the email field to see the existing-user card path.
142
+ */
143
+ export const CompanyTeam: Story = {
144
+ name: 'Company Team',
145
+ args: {
146
+ mode: 'company-team',
147
+ entityContext: {
148
+ id: 'company-001',
149
+ name: 'Live Events Group',
150
+ type: 'company',
151
+ },
152
+ onCheckEmail: checkEmail,
153
+ onFetchCompanyVenues: fetchCompanyVenues,
154
+ onInviteUser: async (data) => { await delay(1000); console.log('Invite sent:', data) },
155
+ onCancel: () => console.log('Cancel'),
156
+ },
157
+ }