diff --git a/dev/docker-compose.min.yaml b/dev/docker-compose.min.yaml index 7e524c460e..62acb09a37 100644 --- a/dev/docker-compose.min.yaml +++ b/dev/docker-compose.min.yaml @@ -1,6 +1,6 @@ services: cockroach: - image: cockroachdb/cockroach:latest-v24.2 + image: cockroachdb/cockroach:latest-v24.3 extra_hosts: - 'huly.local:host-gateway' ports: @@ -11,7 +11,7 @@ services: - cockroach_db:/cockroach/cockroach-data restart: unless-stopped redpanda: - image: docker.redpanda.com/redpandadata/redpanda:v24.3.6 + image: docker.redpanda.com/redpandadata/redpanda:v25.2.3 extra_hosts: - 'huly.local:host-gateway' command: diff --git a/dev/docker-compose.yaml b/dev/docker-compose.yaml index f0a62a4d5f..10933bf686 100644 --- a/dev/docker-compose.yaml +++ b/dev/docker-compose.yaml @@ -41,7 +41,7 @@ services: - 4040:4040 restart: unless-stopped cockroach: - image: cockroachdb/cockroach:latest-v24.2 + image: cockroachdb/cockroach:latest-v24.3 extra_hosts: - 'huly.local:host-gateway' ports: @@ -52,7 +52,7 @@ services: - cockroach_db:/cockroach/cockroach-data restart: unless-stopped redpanda: - image: docker.redpanda.com/redpandadata/redpanda:v24.3.6 + image: docker.redpanda.com/redpandadata/redpanda:v25.2.3 extra_hosts: - 'huly.local:host-gateway' command: @@ -84,7 +84,7 @@ services: retries: 10 restart: unless-stopped redpanda_console: - image: docker.redpanda.com/redpandadata/console:v2.8.3 + image: docker.redpanda.com/redpandadata/console:v2.8.10 extra_hosts: - 'huly.local:host-gateway' entrypoint: /bin/sh @@ -499,6 +499,25 @@ services: - QUEUE_CONFIG=${QUEUE_CONFIG} - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces restart: unless-stopped + hulylake: + image: hardcoreeng/hulylake + extra_hosts: + - 'huly.local:host-gateway' + depends_on: + minio: + condition: service_healthy + cockroach: + condition: service_started + ports: + - 8096:8096 + environment: + - HULY_TOKEN_SECRET=secret + - HULY_DB_CONNECTION=${DB_CR_URL} + - AWS_ENDPOINT_URL=http://minio:9000 + - AWS_REGION=local + - AWS_ACCESS_KEY_ID=minioadmin + - AWS_SECRET_ACCESS_KEY=minioadmin + restart: unless-stopped hulykvs: image: hardcoreeng/hulykvs depends_on: diff --git a/models/process/src/index.ts b/models/process/src/index.ts index c64ea6b144..faabdfad98 100644 --- a/models/process/src/index.ts +++ b/models/process/src/index.ts @@ -671,7 +671,8 @@ export function createModel (builder: Builder): void { of: core.class.ArrOf, category: 'array', label: process.string.Insert, - editor: process.transformEditor.ArrayElementEditor, + allowMany: true, + editor: process.transformEditor.MultiArrayElementEditor, type: 'transform' }, process.function.Insert @@ -684,6 +685,7 @@ export function createModel (builder: Builder): void { of: core.class.ArrOf, category: 'array', label: process.string.Remove, + allowMany: true, editor: process.transformEditor.ArrayElementEditor, type: 'transform' }, @@ -697,6 +699,7 @@ export function createModel (builder: Builder): void { of: core.class.ArrOf, category: 'array', label: process.string.RemoveFirst, + allowMany: true, type: 'transform' }, process.function.RemoveFirst @@ -709,18 +712,7 @@ export function createModel (builder: Builder): void { of: core.class.ArrOf, category: 'array', label: process.string.RemoveLast, - type: 'transform' - }, - process.function.RemoveLast - ) - - builder.createDoc( - process.class.ProcessFunction, - core.space.Model, - { - of: core.class.ArrOf, - category: 'array', - label: process.string.RemoveLast, + allowMany: true, type: 'transform' }, process.function.RemoveLast @@ -739,6 +731,42 @@ export function createModel (builder: Builder): void { process.function.RoleContext ) + builder.createDoc( + process.class.ProcessFunction, + core.space.Model, + { + of: contact.class.Person, + category: 'attribute', + label: process.string.CurrentUser, + type: 'context' + }, + process.function.CurrentUser + ) + + builder.createDoc( + process.class.ProcessFunction, + core.space.Model, + { + of: contact.mixin.Employee, + category: 'attribute', + label: process.string.CurrentUser, + type: 'context' + }, + process.function.CurrentEmployee + ) + + builder.createDoc( + process.class.ProcessFunction, + core.space.Model, + { + of: core.class.TypeDate, + category: 'attribute', + label: process.string.CurrentDate, + type: 'context' + }, + process.function.CurrentDate + ) + builder.mixin(process.class.Process, core.class.Class, view.mixin.AttributePresenter, { presenter: process.component.ProcessPresenter }) diff --git a/models/server-process/src/index.ts b/models/server-process/src/index.ts index aadf2c068e..f3b6255dcf 100644 --- a/models/server-process/src/index.ts +++ b/models/server-process/src/index.ts @@ -195,6 +195,18 @@ export function createModel (builder: Builder): void { func: serverProcess.transform.RoleContext }) + builder.mixin(process.function.CurrentDate, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, { + func: serverProcess.transform.CurrentDate + }) + + builder.mixin(process.function.CurrentEmployee, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, { + func: serverProcess.transform.CurrentUser + }) + + builder.mixin(process.function.CurrentUser, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, { + func: serverProcess.transform.CurrentUser + }) + builder.mixin(process.function.Insert, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, { func: serverProcess.transform.Insert }) diff --git a/packages/ui/src/components/ModernEditbox.svelte b/packages/ui/src/components/ModernEditbox.svelte index 6f4ff21d3f..d5d796f2e1 100644 --- a/packages/ui/src/components/ModernEditbox.svelte +++ b/packages/ui/src/components/ModernEditbox.svelte @@ -12,7 +12,7 @@ export let label: IntlString export let value: string | undefined = undefined - export let kind: 'default' | 'ghost' | 'secondary' = 'default' + export let kind: 'default' | 'ghost' | 'secondary' | 'transparent' = 'default' export let size: 'small' | 'medium' | 'large' = 'small' export let disabled: boolean = false export let error: boolean = false @@ -185,6 +185,23 @@ } } } + &.transparent { + &.small, + &.medium { + // medium/ghost - not designed + padding: var(--spacing-1_5) var(--spacing-2); + height: var(--spacing-5); + } + &.large { + padding: var(--spacing-1) var(--spacing-2); + height: var(--spacing-6); + + input { + font-weight: 500; + font-size: 1rem; + } + } + } &.error { box-shadow: inset 0 0 0 1px var(--input-error-BorderColor); diff --git a/plugins/attachment-resources/src/components/AttachmentStyledBox.svelte b/plugins/attachment-resources/src/components/AttachmentStyledBox.svelte index 5480d75e2f..a78baa50a8 100644 --- a/plugins/attachment-resources/src/components/AttachmentStyledBox.svelte +++ b/plugins/attachment-resources/src/components/AttachmentStyledBox.svelte @@ -66,6 +66,7 @@ export let enableAttachments: boolean = true export let isScrollable = true export let kitOptions: Partial = {} + export let fullWidth = false export let useDirectAttachDelete = false export let boundary: HTMLElement | undefined = undefined @@ -373,6 +374,10 @@ } } + export function getAttachments (): Attachment[] { + return Array.from(attachments.values()) + } + $: dispatch('attachments', { size: attachments.size, values: attachments.size === 0 ? true : attachments @@ -408,6 +413,7 @@
pasteAction(ev)} on:dragover|preventDefault={() => {}} on:dragleave={() => {}} @@ -435,7 +441,9 @@ on:blur on:focus {attachFile} - /> + > + + {#if attachments.size > 0 && enableAttachments} () - $: extension = type - ? client - .getModel() - .findAllSync(card.mixin.CreateCardExtension, {}) - .find((it) => hierarchy.isDerived(type, it._id)) - : undefined + $: extension = + type != null + ? client + .getModel() + .findAllSync(card.mixin.CreateCardExtension, {}) + .find((it) => hierarchy.isDerived(type, it._id)) + : undefined let data: Partial> = { title } let _space: Ref | undefined = space?._id - let description: Markup = EmptyMarkup let collaborators: Ref[] = [me] let creating = false @@ -73,7 +74,7 @@ try { creating = true - if (extension?.canCreate) { + if (extension?.canCreate != null) { const fn = await getResource(extension.canCreate) const res = await fn(_space, data) if (res === false) { @@ -156,7 +157,7 @@ + + +
+ {#each sortedActions as action} + { + if (a.disabled !== true) { + handleAction(a, evt) + } + })} + /> + {/each} +
+ + diff --git a/plugins/card-resources/src/components/NewCardForm.svelte b/plugins/card-resources/src/components/NewCardForm.svelte index 68b2a17edb..9330493957 100644 --- a/plugins/card-resources/src/components/NewCardForm.svelte +++ b/plugins/card-resources/src/components/NewCardForm.svelte @@ -1,25 +1,53 @@ +
-
- -
-
- { - if (evt.key === 'Enter') { - void okAction() - } - }} - /> -
-
-
- + (isExpanded = false)} + kind="tertiary" + tooltip={{ label: card.string.ShowLess }} + disabled={creating} /> -
- +
+ +
+ {/if} + + +
+ (isExpanded = true)} + > + + {#if isExpanded} +
+
+ + +
+
+ +
+ +
+ {/if} + +
@@ -138,7 +235,7 @@ position: absolute; top: 0.75rem; right: 1rem; - z-index: 1; + z-index: 100; display: flex; align-items: center; justify-content: flex-end; @@ -162,13 +259,26 @@ .form-row { display: flex; width: 100%; - margin-bottom: 1rem; + &.title { + z-index: 1; + } + &.description { + padding-left: 0.375rem; + margin-top: -2rem; + padding-top: 1rem; + width: 100%; + max-height: 20rem; + + &.collapsed { + margin-bottom: -1rem; + } + } } .form-row-bottom { align-items: center; justify-content: space-between; - margin-bottom: 0; gap: 1rem; + padding-top: 0.5rem; } .form-dropdowns { display: flex; diff --git a/plugins/card-resources/src/plugin.ts b/plugins/card-resources/src/plugin.ts index 84ce31fd8d..ad9506b5dd 100644 --- a/plugins/card-resources/src/plugin.ts +++ b/plugins/card-resources/src/plugin.ts @@ -103,10 +103,11 @@ export default mergeIds(cardId, card, { AddCollaborators: '' as IntlString, Home: '' as IntlString, CardTitle: '' as IntlString, + CardContent: '' as IntlString, Post: '' as IntlString, Compact: '' as IntlString, Comfortable: '' as IntlString, Comfortable2: '' as IntlString, - AdvancedCreateCard: '' as IntlString + ShowLess: '' as IntlString } }) diff --git a/plugins/communication-resources/src/index.ts b/plugins/communication-resources/src/index.ts index 4c64968f73..05b0be4926 100644 --- a/plugins/communication-resources/src/index.ts +++ b/plugins/communication-resources/src/index.ts @@ -44,6 +44,7 @@ import { createPoll, getPollTitle } from './poll' export { isActivityMessage } from './activity' export * from './stores' +export { defaultMessageInputActions } from './utils' export { default as MessagePresenter } from './components/message/MessagePresenter.svelte' export { default as MessageInput } from './components/message/MessageInput.svelte' diff --git a/plugins/contact-resources/src/components/AssigneeBox.svelte b/plugins/contact-resources/src/components/AssigneeBox.svelte index 84b843bdc5..50d446d165 100644 --- a/plugins/contact-resources/src/components/AssigneeBox.svelte +++ b/plugins/contact-resources/src/components/AssigneeBox.svelte @@ -59,6 +59,7 @@ export let avatarSize: IconSize = kind === 'regular' ? 'small' : 'card' export let justify: 'left' | 'center' = 'center' export let width: string | undefined = undefined + export let height: string | undefined = undefined export let shrink: number = 0 export let focusIndex = -1 export let showTooltip: LabelAndProps | PersonLabelTooltip | undefined = undefined @@ -132,7 +133,14 @@ -
+
{#if $$slots.content}
- {#if isOffice(room) && rX === 0 && rY === 0} + {#if isOffice(room) && rX === 0 && rY === 0 && !room.person} ): ProcessFunction { + return client.getModel().findAllSync(plugin.class.ProcessFunction, { _id })[0] + }
dispatch('changeContent')}> @@ -246,11 +251,13 @@ options={{ component: plugin.component.FunctionSelector }} withHover /> -