feat: implement nesting lists

pull/3946/head
Steven 9 months ago
parent 7a4d54bb3c
commit ca213437e9

@ -300,12 +300,16 @@ paths:
type: integer type: integer
format: int32 format: int32
- name: pageToken - name: pageToken
description: "A page token, received from a previous `ListMemos` call.\r\nProvide this to retrieve the subsequent page." description: |-
A page token, received from a previous `ListMemos` call.
Provide this to retrieve the subsequent page.
in: query in: query
required: false required: false
type: string type: string
- name: filter - name: filter
description: "Filter is used to filter memos returned in the list.\r\nFormat: \"creator == 'users/{uid}' && visibilities == ['PUBLIC', 'PROTECTED']\"" description: |-
Filter is used to filter memos returned in the list.
Format: "creator == 'users/{uid}' && visibilities == ['PUBLIC', 'PROTECTED']"
in: query in: query
required: false required: false
type: string type: string
@ -480,7 +484,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: filter - name: filter
description: "Filter is used to filter users returned in the list.\r\nFormat: \"username == 'frank'\"" description: |-
Filter is used to filter users returned in the list.
Format: "username == 'frank'"
in: query in: query
required: false required: false
type: string type: string
@ -641,7 +647,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The resource name of the workspace setting.\r\nFormat: settings/{setting}" description: |-
The resource name of the workspace setting.
Format: settings/{setting}
in: path in: path
required: true required: true
type: string type: string
@ -663,7 +671,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: setting.name - name: setting.name
description: "name is the name of the setting.\r\nFormat: settings/{setting}" description: |-
name is the name of the setting.
Format: settings/{setting}
in: path in: path
required: true required: true
type: string type: string
@ -699,7 +709,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: identityProvider.name - name: identityProvider.name
description: "The name of the identityProvider.\r\nFormat: identityProviders/{id}" description: |-
The name of the identityProvider.
Format: identityProviders/{id}
in: path in: path
required: true required: true
type: string type: string
@ -737,7 +749,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: inbox.name - name: inbox.name
description: "The name of the inbox.\r\nFormat: inboxes/{id}" description: |-
The name of the inbox.
Format: inboxes/{id}
in: path in: path
required: true required: true
type: string type: string
@ -781,7 +795,10 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: memo.name - name: memo.name
description: "The name of the memo.\r\nFormat: memos/{id}\r\nid is the system generated id." description: |-
The name of the memo.
Format: memos/{id}
id is the system generated id.
in: path in: path
required: true required: true
type: string type: string
@ -799,7 +816,9 @@ paths:
$ref: '#/definitions/v1RowStatus' $ref: '#/definitions/v1RowStatus'
creator: creator:
type: string type: string
title: "The name of the creator.\r\nFormat: users/{id}" title: |-
The name of the creator.
Format: users/{id}
createTime: createTime:
type: string type: string
format: date-time format: date-time
@ -852,7 +871,9 @@ paths:
readOnly: true readOnly: true
parent: parent:
type: string type: string
title: "The name of the parent memo.\r\nFormat: memos/{id}" title: |-
The name of the parent memo.
Format: memos/{id}
readOnly: true readOnly: true
snippet: snippet:
type: string type: string
@ -874,7 +895,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name_1 - name: name_1
description: "The name of the user.\r\nFormat: users/{id}" description: |-
The name of the user.
Format: users/{id}
in: path in: path
required: true required: true
type: string type: string
@ -896,7 +919,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name_1 - name: name_1
description: "The name of the identityProvider to delete.\r\nFormat: identityProviders/{id}" description: |-
The name of the identityProvider to delete.
Format: identityProviders/{id}
in: path in: path
required: true required: true
type: string type: string
@ -918,7 +943,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name_2 - name: name_2
description: "The name of the identityProvider to get.\r\nFormat: identityProviders/{id}" description: |-
The name of the identityProvider to get.
Format: identityProviders/{id}
in: path in: path
required: true required: true
type: string type: string
@ -940,7 +967,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name_2 - name: name_2
description: "The name of the inbox to delete.\r\nFormat: inboxes/{id}" description: |-
The name of the inbox to delete.
Format: inboxes/{id}
in: path in: path
required: true required: true
type: string type: string
@ -962,7 +991,10 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name_3 - name: name_3
description: "The name of the resource.\r\nFormat: resources/{id}\r\nid is the system generated unique identifier." description: |-
The name of the resource.
Format: resources/{id}
id is the system generated unique identifier.
in: path in: path
required: true required: true
type: string type: string
@ -984,7 +1016,10 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name_3 - name: name_3
description: "The name of the resource.\r\nFormat: resources/{id}\r\nid is the system generated unique identifier." description: |-
The name of the resource.
Format: resources/{id}
id is the system generated unique identifier.
in: path in: path
required: true required: true
type: string type: string
@ -1006,7 +1041,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name_4 - name: name_4
description: "The name of the memo.\r\nFormat: memos/{id}" description: |-
The name of the memo.
Format: memos/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1028,7 +1065,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name_4 - name: name_4
description: "The name of the memo.\r\nFormat: memos/{id}" description: |-
The name of the memo.
Format: memos/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1050,7 +1089,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the activity.\r\nFormat: activities/{id}" description: |-
The name of the activity.
Format: activities/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1072,7 +1113,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the user.\r\nFormat: users/{id}" description: |-
The name of the user.
Format: users/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1094,7 +1137,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the user.\r\nFormat: users/{id}" description: |-
The name of the user.
Format: users/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1115,7 +1160,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the user.\r\nFormat: users/{id}" description: |-
The name of the user.
Format: users/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1143,7 +1190,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the user.\r\nFormat: users/{id}" description: |-
The name of the user.
Format: users/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1170,7 +1219,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the memo.\r\nFormat: memos/{id}" description: |-
The name of the memo.
Format: memos/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1191,7 +1242,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the memo.\r\nFormat: memos/{id}" description: |-
The name of the memo.
Format: memos/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1218,7 +1271,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the memo.\r\nFormat: memos/{id}. Use \"memos/-\" to list all properties." description: |-
The name of the memo.
Format: memos/{id}. Use "memos/-" to list all properties.
in: path in: path
required: true required: true
type: string type: string
@ -1241,7 +1296,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the memo.\r\nFormat: memos/{id}. Use \"memos/-\" to rebuild all memos." description: |-
The name of the memo.
Format: memos/{id}. Use "memos/-" to rebuild all memos.
in: path in: path
required: true required: true
type: string type: string
@ -1268,7 +1325,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the memo.\r\nFormat: memos/{id}" description: |-
The name of the memo.
Format: memos/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1289,7 +1348,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the memo.\r\nFormat: memos/{id}" description: |-
The name of the memo.
Format: memos/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1316,7 +1377,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the memo.\r\nFormat: memos/{id}" description: |-
The name of the memo.
Format: memos/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1338,7 +1401,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the memo.\r\nFormat: memos/{id}" description: |-
The name of the memo.
Format: memos/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1365,7 +1430,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the memo.\r\nFormat: memos/{id}" description: |-
The name of the memo.
Format: memos/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1387,7 +1454,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the memo.\r\nFormat: memos/{id}" description: |-
The name of the memo.
Format: memos/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1414,7 +1483,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the user.\r\nFormat: users/{id}" description: |-
The name of the user.
Format: users/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1436,13 +1507,17 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: parent - name: parent
description: "The parent, who owns the tags.\r\nFormat: memos/{id}. Use \"memos/-\" to list all tags." description: |-
The parent, who owns the tags.
Format: memos/{id}. Use "memos/-" to list all tags.
in: path in: path
required: true required: true
type: string type: string
pattern: memos/[^/]+ pattern: memos/[^/]+
- name: filter - name: filter
description: "Filter is used to filter memos.\r\nFormat: \"creator == 'users/{uid}' && visibilities == ['PUBLIC', 'PROTECTED']\"" description: |-
Filter is used to filter memos.
Format: "creator == 'users/{uid}' && visibilities == ['PUBLIC', 'PROTECTED']"
in: query in: query
required: false required: false
type: string type: string
@ -1464,7 +1539,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: parent - name: parent
description: "The parent, who owns the tags.\r\nFormat: memos/{id}. Use \"memos/-\" to delete all tags." description: |-
The parent, who owns the tags.
Format: memos/{id}. Use "memos/-" to delete all tags.
in: path in: path
required: true required: true
type: string type: string
@ -1495,7 +1572,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: parent - name: parent
description: "The parent, who owns the tags.\r\nFormat: memos/{id}. Use \"memos/-\" to rename all tags." description: |-
The parent, who owns the tags.
Format: memos/{id}. Use "memos/-" to rename all tags.
in: path in: path
required: true required: true
type: string type: string
@ -1522,7 +1601,10 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: resource.name - name: resource.name
description: "The name of the resource.\r\nFormat: resources/{id}\r\nid is the system generated unique identifier." description: |-
The name of the resource.
Format: resources/{id}
id is the system generated unique identifier.
in: path in: path
required: true required: true
type: string type: string
@ -1554,7 +1636,9 @@ paths:
format: int64 format: int64
memo: memo:
type: string type: string
title: "The related memo.\r\nFormat: memos/{id}" title: |-
The related memo.
Format: memos/{id}
tags: tags:
- ResourceService - ResourceService
/api/v1/{setting.name}: /api/v1/{setting.name}:
@ -1572,7 +1656,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: setting.name - name: setting.name
description: "The name of the user.\r\nFormat: users/{id}" description: |-
The name of the user.
Format: users/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1609,7 +1695,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: user.name - name: user.name
description: "The name of the user.\r\nFormat: users/{id}" description: |-
The name of the user.
Format: users/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1663,7 +1751,9 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the user.\r\nFormat: users/{id}" description: |-
The name of the user.
Format: users/{id}
in: path in: path
required: true required: true
type: string type: string
@ -1696,7 +1786,10 @@ paths:
$ref: '#/definitions/googlerpcStatus' $ref: '#/definitions/googlerpcStatus'
parameters: parameters:
- name: name - name: name
description: "The name of the resource.\r\nFormat: resources/{id}\r\nid is the system generated unique identifier." description: |-
The name of the resource.
Format: resources/{id}
id is the system generated unique identifier.
in: path in: path
required: true required: true
type: string type: string
@ -1714,6 +1807,14 @@ paths:
tags: tags:
- ResourceService - ResourceService
definitions: definitions:
ListNodeKind:
type: string
enum:
- KIND_UNSPECIFIED
- ORDERED
- UNORDERED
- DESCRIPTION
default: KIND_UNSPECIFIED
MemoServiceRebuildMemoPropertyBody: MemoServiceRebuildMemoPropertyBody:
type: object type: object
MemoServiceRenameMemoTagBody: MemoServiceRenameMemoTagBody:
@ -1883,7 +1984,9 @@ definitions:
properties: properties:
name: name:
type: string type: string
title: "The name of the identityProvider.\r\nFormat: identityProviders/{id}" title: |-
The name of the identityProvider.
Format: identityProviders/{id}
type: type:
$ref: '#/definitions/apiv1IdentityProviderType' $ref: '#/definitions/apiv1IdentityProviderType'
title: title:
@ -1927,7 +2030,9 @@ definitions:
properties: properties:
name: name:
type: string type: string
title: "The name of the user.\r\nFormat: users/{id}" title: |-
The name of the user.
Format: users/{id}
locale: locale:
type: string type: string
description: The preferred locale of the user. description: The preferred locale of the user.
@ -1971,7 +2076,10 @@ definitions:
weekStartDayOffset: weekStartDayOffset:
type: integer type: integer
format: int32 format: int32
description: "week_start_day_offset is the week start day offset from Sunday.\r\n0: Sunday, 1: Monday, 2: Tuesday, 3: Wednesday, 4: Thursday, 5: Friday, 6: Saturday\r\nDefault is Sunday." description: |-
week_start_day_offset is the week start day offset from Sunday.
0: Sunday, 1: Monday, 2: Tuesday, 3: Wednesday, 4: Thursday, 5: Friday, 6: Saturday
Default is Sunday.
disallowChangeUsername: disallowChangeUsername:
type: boolean type: boolean
description: disallow_change_username disallows changing username. description: disallow_change_username disallows changing username.
@ -2008,7 +2116,9 @@ definitions:
properties: properties:
name: name:
type: string type: string
title: "name is the name of the setting.\r\nFormat: settings/{setting}" title: |-
name is the name of the setting.
Format: settings/{setting}
generalSetting: generalSetting:
$ref: '#/definitions/apiv1WorkspaceGeneralSetting' $ref: '#/definitions/apiv1WorkspaceGeneralSetting'
storageSetting: storageSetting:
@ -2023,7 +2133,9 @@ definitions:
description: storage_type is the storage type. description: storage_type is the storage type.
filepathTemplate: filepathTemplate:
type: string type: string
title: "The template of file path.\r\ne.g. assets/{timestamp}_{filename}" title: |-
The template of file path.
e.g. assets/{timestamp}_{filename}
uploadSizeLimitMb: uploadSizeLimitMb:
type: string type: string
format: int64 format: int64
@ -2182,7 +2294,9 @@ definitions:
properties: properties:
name: name:
type: string type: string
title: "The name of the activity.\r\nFormat: activities/{id}" title: |-
The name of the activity.
Format: activities/{id}
creatorId: creatorId:
type: integer type: integer
format: int32 format: int32
@ -2313,7 +2427,9 @@ definitions:
properties: properties:
name: name:
type: string type: string
title: "The name of the inbox.\r\nFormat: inboxes/{id}" title: |-
The name of the inbox.
Format: inboxes/{id}
sender: sender:
type: string type: string
title: 'Format: users/{id}' title: 'Format: users/{id}'
@ -2433,7 +2549,10 @@ definitions:
additionalProperties: additionalProperties:
type: integer type: integer
format: int32 format: int32
description: "tag_amounts is the amount of tags.\r\nkey is the tag name. e.g. \"tag1\".\r\nvalue is the amount of the tag." description: |-
tag_amounts is the amount of tags.
key is the tag name. e.g. "tag1".
value is the amount of the tag.
v1ListMemosResponse: v1ListMemosResponse:
type: object type: object
properties: properties:
@ -2444,10 +2563,17 @@ definitions:
$ref: '#/definitions/v1Memo' $ref: '#/definitions/v1Memo'
nextPageToken: nextPageToken:
type: string type: string
description: "A token, which can be sent as `page_token` to retrieve the next page.\r\nIf this field is omitted, there are no subsequent pages." description: |-
A token, which can be sent as `page_token` to retrieve the next page.
If this field is omitted, there are no subsequent pages.
v1ListNode: v1ListNode:
type: object type: object
properties: properties:
kind:
$ref: '#/definitions/ListNodeKind'
indent:
type: integer
format: int32
children: children:
type: array type: array
items: items:
@ -2500,7 +2626,10 @@ definitions:
properties: properties:
name: name:
type: string type: string
description: "The name of the memo.\r\nFormat: memos/{id}\r\nid is the system generated id." description: |-
The name of the memo.
Format: memos/{id}
id is the system generated id.
uid: uid:
type: string type: string
description: The user defined id of the memo. description: The user defined id of the memo.
@ -2508,7 +2637,9 @@ definitions:
$ref: '#/definitions/v1RowStatus' $ref: '#/definitions/v1RowStatus'
creator: creator:
type: string type: string
title: "The name of the creator.\r\nFormat: users/{id}" title: |-
The name of the creator.
Format: users/{id}
createTime: createTime:
type: string type: string
format: date-time format: date-time
@ -2561,7 +2692,9 @@ definitions:
readOnly: true readOnly: true
parent: parent:
type: string type: string
title: "The name of the parent memo.\r\nFormat: memos/{id}" title: |-
The name of the parent memo.
Format: memos/{id}
readOnly: true readOnly: true
snippet: snippet:
type: string type: string
@ -2586,7 +2719,9 @@ definitions:
properties: properties:
name: name:
type: string type: string
title: "The name of the memo property.\r\nFormat: memos/{id}/properties/{property_id}" title: |-
The name of the memo property.
Format: memos/{id}/properties/{property_id}
property: property:
$ref: '#/definitions/v1MemoProperty' $ref: '#/definitions/v1MemoProperty'
readOnly: true readOnly: true
@ -2599,10 +2734,14 @@ definitions:
properties: properties:
memo: memo:
type: string type: string
title: "The name of memo.\r\nFormat: \"memos/{uid}\"" title: |-
The name of memo.
Format: "memos/{uid}"
relatedMemo: relatedMemo:
type: string type: string
title: "The name of related memo.\r\nFormat: \"memos/{uid}\"" title: |-
The name of related memo.
Format: "memos/{uid}"
type: type:
$ref: '#/definitions/v1MemoRelationType' $ref: '#/definitions/v1MemoRelationType'
v1MemoRelationType: v1MemoRelationType:
@ -2762,7 +2901,9 @@ definitions:
format: int32 format: int32
creator: creator:
type: string type: string
title: "The name of the creator.\r\nFormat: users/{id}" title: |-
The name of the creator.
Format: users/{id}
contentId: contentId:
type: string type: string
reactionType: reactionType:
@ -2796,7 +2937,10 @@ definitions:
properties: properties:
name: name:
type: string type: string
description: "The name of the resource.\r\nFormat: resources/{id}\r\nid is the system generated unique identifier." description: |-
The name of the resource.
Format: resources/{id}
id is the system generated unique identifier.
uid: uid:
type: string type: string
description: The user defined id of the resource. description: The user defined id of the resource.
@ -2818,7 +2962,9 @@ definitions:
format: int64 format: int64
memo: memo:
type: string type: string
title: "The related memo.\r\nFormat: memos/{id}" title: |-
The related memo.
Format: memos/{id}
v1RestoreMarkdownNodesRequest: v1RestoreMarkdownNodesRequest:
type: object type: object
properties: properties:
@ -2940,7 +3086,9 @@ definitions:
properties: properties:
name: name:
type: string type: string
title: "The name of the user.\r\nFormat: users/{id}" title: |-
The name of the user.
Format: users/{id}
id: id:
type: integer type: integer
format: int32 format: int32
@ -3014,7 +3162,9 @@ definitions:
properties: properties:
owner: owner:
type: string type: string
title: "The name of instance owner.\r\nFormat: \"users/{id}\"" title: |-
The name of instance owner.
Format: "users/{id}"
version: version:
type: string type: string
title: version is the current version of instance title: version is the current version of instance

@ -23,7 +23,7 @@ require (
github.com/spf13/cobra v1.8.1 github.com/spf13/cobra v1.8.1
github.com/spf13/viper v1.19.0 github.com/spf13/viper v1.19.0
github.com/stretchr/testify v1.9.0 github.com/stretchr/testify v1.9.0
github.com/usememos/gomark v0.0.0-20240920000613-9640de1955cd github.com/usememos/gomark v0.0.0-20240921115339-c9d3461efcd8
golang.org/x/crypto v0.27.0 golang.org/x/crypto v0.27.0
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 golang.org/x/exp v0.0.0-20240909161429-701f63a606c0
golang.org/x/mod v0.21.0 golang.org/x/mod v0.21.0

@ -438,8 +438,8 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/usememos/gomark v0.0.0-20240920000613-9640de1955cd h1:tqBJ00an5/MWAu1pIFkyE9TCSIe1JYAhShJlVeveYgs= github.com/usememos/gomark v0.0.0-20240921115339-c9d3461efcd8 h1:kutNP+XD8oiBzoJJER35fbVaphCeRhU1dKDjZ5eKT0M=
github.com/usememos/gomark v0.0.0-20240920000613-9640de1955cd/go.mod h1:7CZRoYFQyyljzplOTeyODFR26O+wr0BbnpTWVLGfKJA= github.com/usememos/gomark v0.0.0-20240921115339-c9d3461efcd8/go.mod h1:7CZRoYFQyyljzplOTeyODFR26O+wr0BbnpTWVLGfKJA=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=

@ -173,7 +173,15 @@ message BlockquoteNode {
} }
message ListNode { message ListNode {
repeated Node children = 1; enum Kind {
KIND_UNSPECIFIED = 0;
ORDERED = 1;
UNORDERED = 2;
DESCRIPTION = 3;
}
Kind kind = 1;
int32 indent = 2;
repeated Node children = 3;
} }
message OrderedListItemNode { message OrderedListItemNode {

@ -159,6 +159,58 @@ func (NodeType) EnumDescriptor() ([]byte, []int) {
return file_api_v1_markdown_service_proto_rawDescGZIP(), []int{0} return file_api_v1_markdown_service_proto_rawDescGZIP(), []int{0}
} }
type ListNode_Kind int32
const (
ListNode_KIND_UNSPECIFIED ListNode_Kind = 0
ListNode_ORDERED ListNode_Kind = 1
ListNode_UNORDERED ListNode_Kind = 2
ListNode_DESCRIPTION ListNode_Kind = 3
)
// Enum value maps for ListNode_Kind.
var (
ListNode_Kind_name = map[int32]string{
0: "KIND_UNSPECIFIED",
1: "ORDERED",
2: "UNORDERED",
3: "DESCRIPTION",
}
ListNode_Kind_value = map[string]int32{
"KIND_UNSPECIFIED": 0,
"ORDERED": 1,
"UNORDERED": 2,
"DESCRIPTION": 3,
}
)
func (x ListNode_Kind) Enum() *ListNode_Kind {
p := new(ListNode_Kind)
*p = x
return p
}
func (x ListNode_Kind) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ListNode_Kind) Descriptor() protoreflect.EnumDescriptor {
return file_api_v1_markdown_service_proto_enumTypes[1].Descriptor()
}
func (ListNode_Kind) Type() protoreflect.EnumType {
return &file_api_v1_markdown_service_proto_enumTypes[1]
}
func (x ListNode_Kind) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ListNode_Kind.Descriptor instead.
func (ListNode_Kind) EnumDescriptor() ([]byte, []int) {
return file_api_v1_markdown_service_proto_rawDescGZIP(), []int{15, 0}
}
type ParseMarkdownRequest struct { type ParseMarkdownRequest struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -1342,7 +1394,9 @@ type ListNode struct {
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
Children []*Node `protobuf:"bytes,1,rep,name=children,proto3" json:"children,omitempty"` Kind ListNode_Kind `protobuf:"varint,1,opt,name=kind,proto3,enum=memos.api.v1.ListNode_Kind" json:"kind,omitempty"`
Indent int32 `protobuf:"varint,2,opt,name=indent,proto3" json:"indent,omitempty"`
Children []*Node `protobuf:"bytes,3,rep,name=children,proto3" json:"children,omitempty"`
} }
func (x *ListNode) Reset() { func (x *ListNode) Reset() {
@ -1377,6 +1431,20 @@ func (*ListNode) Descriptor() ([]byte, []int) {
return file_api_v1_markdown_service_proto_rawDescGZIP(), []int{15} return file_api_v1_markdown_service_proto_rawDescGZIP(), []int{15}
} }
func (x *ListNode) GetKind() ListNode_Kind {
if x != nil {
return x.Kind
}
return ListNode_KIND_UNSPECIFIED
}
func (x *ListNode) GetIndent() int32 {
if x != nil {
return x.Indent
}
return 0
}
func (x *ListNode) GetChildren() []*Node { func (x *ListNode) GetChildren() []*Node {
if x != nil { if x != nil {
return x.Children return x.Children
@ -2906,203 +2974,212 @@ var file_api_v1_markdown_service_proto_rawDesc = []byte{
0x6b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x6b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68,
0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d,
0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65,
0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x3a, 0x0a, 0x08, 0x4c, 0x69, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0xce, 0x01, 0x0a, 0x08, 0x4c,
0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18,
0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x4b, 0x69,
0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x75, 0x0a, 0x13, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65,
0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74,
0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x03,
0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76,
0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e,
0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x49, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x10, 0x4b, 0x49, 0x4e, 0x44,
0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b,
0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x77, 0x0a, 0x0a, 0x07, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x55,
0x15, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x45,
0x65, 0x6d, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x22, 0x75, 0x0a, 0x13, 0x4f,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x16, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x6f,
0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01,
0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e,
0x65, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03,
0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x8e, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x73, 0x6b, 0x4c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72,
0x65, 0x6e, 0x22, 0x77, 0x0a, 0x15, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c,
0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73,
0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d,
0x62, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x62, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20,
0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x08, 0x63,
0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e,
0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64,
0x72, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x8e, 0x01, 0x0a, 0x10,
0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x6f, 0x64, 0x65,
0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x29, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x68, 0x42, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65,
0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74,
0x6e, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01,
0x12, 0x2a, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x08,
0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12,
0x4e, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f,
0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x29, 0x0a, 0x0d,
0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x4d, 0x61, 0x74, 0x68, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a,
0x77, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64,
0x65, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x1a, 0x2f, 0x0a, 0x03, 0x52,
0x6f, 0x77, 0x12, 0x28, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31,
0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x52, 0x0a, 0x13,
0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4e,
0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f,
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f,
0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61,
0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73,
0x22, 0x24, 0x0a, 0x08, 0x54, 0x65, 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07,
0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63,
0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x52, 0x0a, 0x08, 0x42, 0x6f, 0x6c, 0x64, 0x4e, 0x6f,
0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68,
0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d,
0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65,
0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x3e, 0x0a, 0x0a, 0x49, 0x74,
0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62,
0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c,
0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x42, 0x0a, 0x0e, 0x42, 0x6f,
0x6c, 0x64, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06,
0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79,
0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x24,
0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f,
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e,
0x74, 0x65, 0x6e, 0x74, 0x22, 0x38, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64,
0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03,
0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x30,
0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65,
0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x10,
0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c,
0x22, 0x40, 0x0a, 0x0c, 0x41, 0x75, 0x74, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65,
0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75,
0x72, 0x6c, 0x12, 0x1e, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x74, 0x65, 0x78,
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x52, 0x61, 0x77, 0x54, 0x65,
0x78, 0x74, 0x22, 0x23, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a,
0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2d, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x69, 0x6b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c,
0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18,
0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70,
0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2f, 0x0a, 0x15, 0x45, 0x73, 0x63, 0x61, 0x70, 0x69, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65,
0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x02,
0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12,
0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0x24, 0x0a, 0x08, 0x4d, 0x61, 0x74, 0x68, 0x4e, 0x2f, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62,
0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73,
0x1a, 0x2f, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x28, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73,
0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c,
0x73, 0x22, 0x52, 0x0a, 0x13, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x43, 0x6f, 0x6e,
0x74, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f,
0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a,
0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70,
0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x24, 0x0a, 0x08, 0x54, 0x65, 0x78, 0x74, 0x4e, 0x6f, 0x64,
0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x52, 0x0a, 0x08, 0x42,
0x6f, 0x6c, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f,
0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12,
0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31,
0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22,
0x3e, 0x0a, 0x0a, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a,
0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73,
0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22,
0x42, 0x0a, 0x0e, 0x42, 0x6f, 0x6c, 0x64, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64,
0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e,
0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x22, 0x24, 0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12,
0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x38, 0x0a, 0x09, 0x49, 0x6d, 0x61,
0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65,
0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78,
0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
0x75, 0x72, 0x6c, 0x22, 0x30, 0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12,
0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74,
0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x41, 0x75, 0x74, 0x6f, 0x4c, 0x69, 0x6e,
0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1e, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x72, 0x61,
0x77, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73,
0x52, 0x61, 0x77, 0x54, 0x65, 0x78, 0x74, 0x22, 0x23, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4e, 0x6f,
0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2d, 0x0a, 0x11,
0x53, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64,
0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2f, 0x0a, 0x15, 0x45,
0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0x24, 0x0a, 0x08,
0x4d, 0x61, 0x74, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
0x6e, 0x74, 0x22, 0x29, 0x0a, 0x0d, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4e,
0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a,
0x0d, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18,
0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2b, 0x0a, 0x0f, 0x53, 0x75, 0x70, 0x65,
0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63,
0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f,
0x65, 0x6e, 0x74, 0x22, 0x2b, 0x0a, 0x0f, 0x53, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x54, 0x0a, 0x15, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
0x70, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x23,
0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x22, 0x54, 0x0a, 0x15, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x43, 0x6f, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e,
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20,
0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x27, 0x0a, 0x0b, 0x53,
0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x70, 0x6f, 0x69, 0x6c, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f,
0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e,
0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x27, 0x0a, 0x0b, 0x53, 0x70, 0x6f, 0x69, 0x6c, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x22, 0xba, 0x01, 0x0a, 0x0f, 0x48, 0x54, 0x4d, 0x4c, 0x45, 0x6c, 0x65,
0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x67, 0x5f,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x67, 0x4e,
0xba, 0x01, 0x0a, 0x0f, 0x48, 0x54, 0x4d, 0x4c, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4d, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x54, 0x4d, 0x4c, 0x45, 0x6c, 0x65, 0x6d, 0x65,
0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
0x31, 0x2e, 0x48, 0x54, 0x4d, 0x4c, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x01, 0x2a, 0x83, 0x04, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14,
0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0a, 0x10, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x83, 0x04, 0x0a, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x42, 0x52, 0x45,
0x08, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x44, 0x41, 0x4b, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x41, 0x52, 0x41, 0x47, 0x52, 0x41, 0x50,
0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x48, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x4c, 0x4f, 0x43,
0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x10, 0x01, 0x12, 0x4b, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x04,
0x0d, 0x0a, 0x09, 0x50, 0x41, 0x52, 0x41, 0x47, 0x52, 0x41, 0x50, 0x48, 0x10, 0x02, 0x12, 0x0e, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x52,
0x0a, 0x0a, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x03, 0x12, 0x0b, 0x55, 0x4c, 0x45, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x51, 0x55,
0x0a, 0x07, 0x48, 0x45, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x4f, 0x54, 0x45, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12,
0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x10, 0x05, 0x15, 0x0a, 0x11, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f,
0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x10, 0x06, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x08, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x4e, 0x4f, 0x52, 0x44, 0x45,
0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x52, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x09, 0x12,
0x44, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x12, 0x0a, 0x0e, 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x49, 0x54, 0x45,
0x08, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x4d, 0x10, 0x0a, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x41, 0x54, 0x48, 0x5f, 0x42, 0x4c, 0x4f, 0x43,
0x49, 0x53, 0x54, 0x5f, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x41, 0x4b, 0x10, 0x0b, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0c, 0x12, 0x14,
0x53, 0x4b, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x0a, 0x12, 0x0e, 0x0a, 0x10, 0x45, 0x4d, 0x42, 0x45, 0x44, 0x44, 0x45, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45,
0x0a, 0x0a, 0x4d, 0x41, 0x54, 0x48, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x0b, 0x12, 0x09, 0x4e, 0x54, 0x10, 0x0d, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x33, 0x12, 0x08,
0x0a, 0x05, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0c, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x4d, 0x42, 0x0a, 0x04, 0x42, 0x4f, 0x4c, 0x44, 0x10, 0x34, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x54, 0x41, 0x4c,
0x45, 0x44, 0x44, 0x45, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x0d, 0x12, 0x49, 0x43, 0x10, 0x35, 0x12, 0x0f, 0x0a, 0x0b, 0x42, 0x4f, 0x4c, 0x44, 0x5f, 0x49, 0x54, 0x41,
0x08, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x33, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x4c, 0x4c, 0x49, 0x43, 0x10, 0x36, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x37, 0x12,
0x44, 0x10, 0x34, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, 0x35, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x38, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49,
0x0f, 0x0a, 0x0b, 0x42, 0x4f, 0x4c, 0x44, 0x5f, 0x49, 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, 0x36, 0x4e, 0x4b, 0x10, 0x39, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x4c, 0x49, 0x4e,
0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x37, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4d, 0x4b, 0x10, 0x3a, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x41, 0x47, 0x10, 0x3b, 0x12, 0x11, 0x0a, 0x0d,
0x41, 0x47, 0x45, 0x10, 0x38, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x39, 0x12, 0x53, 0x54, 0x52, 0x49, 0x4b, 0x45, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x3c, 0x12,
0x0d, 0x0a, 0x09, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x3a, 0x12, 0x07, 0x16, 0x0a, 0x12, 0x45, 0x53, 0x43, 0x41, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x48, 0x41, 0x52,
0x0a, 0x03, 0x54, 0x41, 0x47, 0x10, 0x3b, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x52, 0x49, 0x4b, 0x41, 0x43, 0x54, 0x45, 0x52, 0x10, 0x3d, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x41, 0x54, 0x48, 0x10,
0x45, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x3c, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x53, 0x3e, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x49, 0x47, 0x48, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x10, 0x3f,
0x43, 0x41, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x40, 0x12,
0x10, 0x3d, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x41, 0x54, 0x48, 0x10, 0x3e, 0x12, 0x0d, 0x0a, 0x09, 0x0f, 0x0a, 0x0b, 0x53, 0x55, 0x50, 0x45, 0x52, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x41,
0x48, 0x49, 0x47, 0x48, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x10, 0x3f, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x43, 0x45, 0x44, 0x5f, 0x43,
0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x40, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x55, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x42, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x50, 0x4f, 0x49,
0x50, 0x45, 0x52, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x41, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x4c, 0x45, 0x52, 0x10, 0x43, 0x12, 0x10, 0x0a, 0x0c, 0x48, 0x54, 0x4d, 0x4c, 0x5f, 0x45, 0x4c,
0x45, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x43, 0x45, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x44, 0x32, 0xc7, 0x04, 0x0a, 0x0f, 0x4d, 0x61, 0x72, 0x6b,
0x54, 0x10, 0x42, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x50, 0x4f, 0x49, 0x4c, 0x45, 0x52, 0x10, 0x43, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7b, 0x0a, 0x0d, 0x50,
0x12, 0x10, 0x0a, 0x0c, 0x48, 0x54, 0x4d, 0x4c, 0x5f, 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x22, 0x2e, 0x6d,
0x10, 0x44, 0x32, 0xc7, 0x04, 0x0a, 0x0f, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x73,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7b, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x22, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x1a, 0x23, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73,
0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x65, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a,
0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x22, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f,
0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x77, 0x6e, 0x3a, 0x70, 0x61, 0x72, 0x73, 0x65, 0x12, 0x97, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x73,
0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x6f, 0x64, 0x65,
0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x3a, 0x70, 0x61, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31,
0x72, 0x73, 0x65, 0x12, 0x97, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4d, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e,
0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6d,
0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74,
0x6f, 0x72, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x6f, 0x72, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x73,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22,
0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4d, 0x61, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x72,
0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x3a, 0x72, 0x65, 0x73, 0x74, 0x6f,
0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x72, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79,
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x2b, 0x2e,
0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x3a, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x9f, 0x01, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72,
0x0a, 0x16, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x6f,
0x6f, 0x77, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x65, 0x6d,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
0x79, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x69, 0x66, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x73,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24,
0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x4d, 0x61, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x72,
0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e,
0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x67, 0x69, 0x66, 0x79, 0x12, 0x7b, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x4d,
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x24, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x12, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x65,
0x7b, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e,
0x74, 0x61, 0x12, 0x24, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e,
0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x72, 0x6b, 0x64,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x6f, 0x77, 0x6e, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
0x64, 0x61, 0x74, 0x61, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x61, 0x42, 0xac, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x2f, 0x6c, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x14, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e,
0x69, 0x6e, 0x6b, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0xac, 0x01, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30,
0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65,
0x31, 0x42, 0x14, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31,
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41,
0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70,
0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69,
0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea,
0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31,
0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x65, 0x6d,
0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
} }
var ( var (
@ -3117,114 +3194,116 @@ func file_api_v1_markdown_service_proto_rawDescGZIP() []byte {
return file_api_v1_markdown_service_proto_rawDescData return file_api_v1_markdown_service_proto_rawDescData
} }
var file_api_v1_markdown_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_api_v1_markdown_service_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_api_v1_markdown_service_proto_msgTypes = make([]protoimpl.MessageInfo, 42) var file_api_v1_markdown_service_proto_msgTypes = make([]protoimpl.MessageInfo, 42)
var file_api_v1_markdown_service_proto_goTypes = []any{ var file_api_v1_markdown_service_proto_goTypes = []any{
(NodeType)(0), // 0: memos.api.v1.NodeType (NodeType)(0), // 0: memos.api.v1.NodeType
(*ParseMarkdownRequest)(nil), // 1: memos.api.v1.ParseMarkdownRequest (ListNode_Kind)(0), // 1: memos.api.v1.ListNode.Kind
(*ParseMarkdownResponse)(nil), // 2: memos.api.v1.ParseMarkdownResponse (*ParseMarkdownRequest)(nil), // 2: memos.api.v1.ParseMarkdownRequest
(*RestoreMarkdownNodesRequest)(nil), // 3: memos.api.v1.RestoreMarkdownNodesRequest (*ParseMarkdownResponse)(nil), // 3: memos.api.v1.ParseMarkdownResponse
(*RestoreMarkdownNodesResponse)(nil), // 4: memos.api.v1.RestoreMarkdownNodesResponse (*RestoreMarkdownNodesRequest)(nil), // 4: memos.api.v1.RestoreMarkdownNodesRequest
(*StringifyMarkdownNodesRequest)(nil), // 5: memos.api.v1.StringifyMarkdownNodesRequest (*RestoreMarkdownNodesResponse)(nil), // 5: memos.api.v1.RestoreMarkdownNodesResponse
(*StringifyMarkdownNodesResponse)(nil), // 6: memos.api.v1.StringifyMarkdownNodesResponse (*StringifyMarkdownNodesRequest)(nil), // 6: memos.api.v1.StringifyMarkdownNodesRequest
(*GetLinkMetadataRequest)(nil), // 7: memos.api.v1.GetLinkMetadataRequest (*StringifyMarkdownNodesResponse)(nil), // 7: memos.api.v1.StringifyMarkdownNodesResponse
(*LinkMetadata)(nil), // 8: memos.api.v1.LinkMetadata (*GetLinkMetadataRequest)(nil), // 8: memos.api.v1.GetLinkMetadataRequest
(*Node)(nil), // 9: memos.api.v1.Node (*LinkMetadata)(nil), // 9: memos.api.v1.LinkMetadata
(*LineBreakNode)(nil), // 10: memos.api.v1.LineBreakNode (*Node)(nil), // 10: memos.api.v1.Node
(*ParagraphNode)(nil), // 11: memos.api.v1.ParagraphNode (*LineBreakNode)(nil), // 11: memos.api.v1.LineBreakNode
(*CodeBlockNode)(nil), // 12: memos.api.v1.CodeBlockNode (*ParagraphNode)(nil), // 12: memos.api.v1.ParagraphNode
(*HeadingNode)(nil), // 13: memos.api.v1.HeadingNode (*CodeBlockNode)(nil), // 13: memos.api.v1.CodeBlockNode
(*HorizontalRuleNode)(nil), // 14: memos.api.v1.HorizontalRuleNode (*HeadingNode)(nil), // 14: memos.api.v1.HeadingNode
(*BlockquoteNode)(nil), // 15: memos.api.v1.BlockquoteNode (*HorizontalRuleNode)(nil), // 15: memos.api.v1.HorizontalRuleNode
(*ListNode)(nil), // 16: memos.api.v1.ListNode (*BlockquoteNode)(nil), // 16: memos.api.v1.BlockquoteNode
(*OrderedListItemNode)(nil), // 17: memos.api.v1.OrderedListItemNode (*ListNode)(nil), // 17: memos.api.v1.ListNode
(*UnorderedListItemNode)(nil), // 18: memos.api.v1.UnorderedListItemNode (*OrderedListItemNode)(nil), // 18: memos.api.v1.OrderedListItemNode
(*TaskListItemNode)(nil), // 19: memos.api.v1.TaskListItemNode (*UnorderedListItemNode)(nil), // 19: memos.api.v1.UnorderedListItemNode
(*MathBlockNode)(nil), // 20: memos.api.v1.MathBlockNode (*TaskListItemNode)(nil), // 20: memos.api.v1.TaskListItemNode
(*TableNode)(nil), // 21: memos.api.v1.TableNode (*MathBlockNode)(nil), // 21: memos.api.v1.MathBlockNode
(*EmbeddedContentNode)(nil), // 22: memos.api.v1.EmbeddedContentNode (*TableNode)(nil), // 22: memos.api.v1.TableNode
(*TextNode)(nil), // 23: memos.api.v1.TextNode (*EmbeddedContentNode)(nil), // 23: memos.api.v1.EmbeddedContentNode
(*BoldNode)(nil), // 24: memos.api.v1.BoldNode (*TextNode)(nil), // 24: memos.api.v1.TextNode
(*ItalicNode)(nil), // 25: memos.api.v1.ItalicNode (*BoldNode)(nil), // 25: memos.api.v1.BoldNode
(*BoldItalicNode)(nil), // 26: memos.api.v1.BoldItalicNode (*ItalicNode)(nil), // 26: memos.api.v1.ItalicNode
(*CodeNode)(nil), // 27: memos.api.v1.CodeNode (*BoldItalicNode)(nil), // 27: memos.api.v1.BoldItalicNode
(*ImageNode)(nil), // 28: memos.api.v1.ImageNode (*CodeNode)(nil), // 28: memos.api.v1.CodeNode
(*LinkNode)(nil), // 29: memos.api.v1.LinkNode (*ImageNode)(nil), // 29: memos.api.v1.ImageNode
(*AutoLinkNode)(nil), // 30: memos.api.v1.AutoLinkNode (*LinkNode)(nil), // 30: memos.api.v1.LinkNode
(*TagNode)(nil), // 31: memos.api.v1.TagNode (*AutoLinkNode)(nil), // 31: memos.api.v1.AutoLinkNode
(*StrikethroughNode)(nil), // 32: memos.api.v1.StrikethroughNode (*TagNode)(nil), // 32: memos.api.v1.TagNode
(*EscapingCharacterNode)(nil), // 33: memos.api.v1.EscapingCharacterNode (*StrikethroughNode)(nil), // 33: memos.api.v1.StrikethroughNode
(*MathNode)(nil), // 34: memos.api.v1.MathNode (*EscapingCharacterNode)(nil), // 34: memos.api.v1.EscapingCharacterNode
(*HighlightNode)(nil), // 35: memos.api.v1.HighlightNode (*MathNode)(nil), // 35: memos.api.v1.MathNode
(*SubscriptNode)(nil), // 36: memos.api.v1.SubscriptNode (*HighlightNode)(nil), // 36: memos.api.v1.HighlightNode
(*SuperscriptNode)(nil), // 37: memos.api.v1.SuperscriptNode (*SubscriptNode)(nil), // 37: memos.api.v1.SubscriptNode
(*ReferencedContentNode)(nil), // 38: memos.api.v1.ReferencedContentNode (*SuperscriptNode)(nil), // 38: memos.api.v1.SuperscriptNode
(*SpoilerNode)(nil), // 39: memos.api.v1.SpoilerNode (*ReferencedContentNode)(nil), // 39: memos.api.v1.ReferencedContentNode
(*HTMLElementNode)(nil), // 40: memos.api.v1.HTMLElementNode (*SpoilerNode)(nil), // 40: memos.api.v1.SpoilerNode
(*TableNode_Row)(nil), // 41: memos.api.v1.TableNode.Row (*HTMLElementNode)(nil), // 41: memos.api.v1.HTMLElementNode
nil, // 42: memos.api.v1.HTMLElementNode.AttributesEntry (*TableNode_Row)(nil), // 42: memos.api.v1.TableNode.Row
nil, // 43: memos.api.v1.HTMLElementNode.AttributesEntry
} }
var file_api_v1_markdown_service_proto_depIdxs = []int32{ var file_api_v1_markdown_service_proto_depIdxs = []int32{
9, // 0: memos.api.v1.ParseMarkdownResponse.nodes:type_name -> memos.api.v1.Node 10, // 0: memos.api.v1.ParseMarkdownResponse.nodes:type_name -> memos.api.v1.Node
9, // 1: memos.api.v1.RestoreMarkdownNodesRequest.nodes:type_name -> memos.api.v1.Node 10, // 1: memos.api.v1.RestoreMarkdownNodesRequest.nodes:type_name -> memos.api.v1.Node
9, // 2: memos.api.v1.StringifyMarkdownNodesRequest.nodes:type_name -> memos.api.v1.Node 10, // 2: memos.api.v1.StringifyMarkdownNodesRequest.nodes:type_name -> memos.api.v1.Node
0, // 3: memos.api.v1.Node.type:type_name -> memos.api.v1.NodeType 0, // 3: memos.api.v1.Node.type:type_name -> memos.api.v1.NodeType
10, // 4: memos.api.v1.Node.line_break_node:type_name -> memos.api.v1.LineBreakNode 11, // 4: memos.api.v1.Node.line_break_node:type_name -> memos.api.v1.LineBreakNode
11, // 5: memos.api.v1.Node.paragraph_node:type_name -> memos.api.v1.ParagraphNode 12, // 5: memos.api.v1.Node.paragraph_node:type_name -> memos.api.v1.ParagraphNode
12, // 6: memos.api.v1.Node.code_block_node:type_name -> memos.api.v1.CodeBlockNode 13, // 6: memos.api.v1.Node.code_block_node:type_name -> memos.api.v1.CodeBlockNode
13, // 7: memos.api.v1.Node.heading_node:type_name -> memos.api.v1.HeadingNode 14, // 7: memos.api.v1.Node.heading_node:type_name -> memos.api.v1.HeadingNode
14, // 8: memos.api.v1.Node.horizontal_rule_node:type_name -> memos.api.v1.HorizontalRuleNode 15, // 8: memos.api.v1.Node.horizontal_rule_node:type_name -> memos.api.v1.HorizontalRuleNode
15, // 9: memos.api.v1.Node.blockquote_node:type_name -> memos.api.v1.BlockquoteNode 16, // 9: memos.api.v1.Node.blockquote_node:type_name -> memos.api.v1.BlockquoteNode
16, // 10: memos.api.v1.Node.list_node:type_name -> memos.api.v1.ListNode 17, // 10: memos.api.v1.Node.list_node:type_name -> memos.api.v1.ListNode
17, // 11: memos.api.v1.Node.ordered_list_item_node:type_name -> memos.api.v1.OrderedListItemNode 18, // 11: memos.api.v1.Node.ordered_list_item_node:type_name -> memos.api.v1.OrderedListItemNode
18, // 12: memos.api.v1.Node.unordered_list_item_node:type_name -> memos.api.v1.UnorderedListItemNode 19, // 12: memos.api.v1.Node.unordered_list_item_node:type_name -> memos.api.v1.UnorderedListItemNode
19, // 13: memos.api.v1.Node.task_list_item_node:type_name -> memos.api.v1.TaskListItemNode 20, // 13: memos.api.v1.Node.task_list_item_node:type_name -> memos.api.v1.TaskListItemNode
20, // 14: memos.api.v1.Node.math_block_node:type_name -> memos.api.v1.MathBlockNode 21, // 14: memos.api.v1.Node.math_block_node:type_name -> memos.api.v1.MathBlockNode
21, // 15: memos.api.v1.Node.table_node:type_name -> memos.api.v1.TableNode 22, // 15: memos.api.v1.Node.table_node:type_name -> memos.api.v1.TableNode
22, // 16: memos.api.v1.Node.embedded_content_node:type_name -> memos.api.v1.EmbeddedContentNode 23, // 16: memos.api.v1.Node.embedded_content_node:type_name -> memos.api.v1.EmbeddedContentNode
23, // 17: memos.api.v1.Node.text_node:type_name -> memos.api.v1.TextNode 24, // 17: memos.api.v1.Node.text_node:type_name -> memos.api.v1.TextNode
24, // 18: memos.api.v1.Node.bold_node:type_name -> memos.api.v1.BoldNode 25, // 18: memos.api.v1.Node.bold_node:type_name -> memos.api.v1.BoldNode
25, // 19: memos.api.v1.Node.italic_node:type_name -> memos.api.v1.ItalicNode 26, // 19: memos.api.v1.Node.italic_node:type_name -> memos.api.v1.ItalicNode
26, // 20: memos.api.v1.Node.bold_italic_node:type_name -> memos.api.v1.BoldItalicNode 27, // 20: memos.api.v1.Node.bold_italic_node:type_name -> memos.api.v1.BoldItalicNode
27, // 21: memos.api.v1.Node.code_node:type_name -> memos.api.v1.CodeNode 28, // 21: memos.api.v1.Node.code_node:type_name -> memos.api.v1.CodeNode
28, // 22: memos.api.v1.Node.image_node:type_name -> memos.api.v1.ImageNode 29, // 22: memos.api.v1.Node.image_node:type_name -> memos.api.v1.ImageNode
29, // 23: memos.api.v1.Node.link_node:type_name -> memos.api.v1.LinkNode 30, // 23: memos.api.v1.Node.link_node:type_name -> memos.api.v1.LinkNode
30, // 24: memos.api.v1.Node.auto_link_node:type_name -> memos.api.v1.AutoLinkNode 31, // 24: memos.api.v1.Node.auto_link_node:type_name -> memos.api.v1.AutoLinkNode
31, // 25: memos.api.v1.Node.tag_node:type_name -> memos.api.v1.TagNode 32, // 25: memos.api.v1.Node.tag_node:type_name -> memos.api.v1.TagNode
32, // 26: memos.api.v1.Node.strikethrough_node:type_name -> memos.api.v1.StrikethroughNode 33, // 26: memos.api.v1.Node.strikethrough_node:type_name -> memos.api.v1.StrikethroughNode
33, // 27: memos.api.v1.Node.escaping_character_node:type_name -> memos.api.v1.EscapingCharacterNode 34, // 27: memos.api.v1.Node.escaping_character_node:type_name -> memos.api.v1.EscapingCharacterNode
34, // 28: memos.api.v1.Node.math_node:type_name -> memos.api.v1.MathNode 35, // 28: memos.api.v1.Node.math_node:type_name -> memos.api.v1.MathNode
35, // 29: memos.api.v1.Node.highlight_node:type_name -> memos.api.v1.HighlightNode 36, // 29: memos.api.v1.Node.highlight_node:type_name -> memos.api.v1.HighlightNode
36, // 30: memos.api.v1.Node.subscript_node:type_name -> memos.api.v1.SubscriptNode 37, // 30: memos.api.v1.Node.subscript_node:type_name -> memos.api.v1.SubscriptNode
37, // 31: memos.api.v1.Node.superscript_node:type_name -> memos.api.v1.SuperscriptNode 38, // 31: memos.api.v1.Node.superscript_node:type_name -> memos.api.v1.SuperscriptNode
38, // 32: memos.api.v1.Node.referenced_content_node:type_name -> memos.api.v1.ReferencedContentNode 39, // 32: memos.api.v1.Node.referenced_content_node:type_name -> memos.api.v1.ReferencedContentNode
39, // 33: memos.api.v1.Node.spoiler_node:type_name -> memos.api.v1.SpoilerNode 40, // 33: memos.api.v1.Node.spoiler_node:type_name -> memos.api.v1.SpoilerNode
40, // 34: memos.api.v1.Node.html_element_node:type_name -> memos.api.v1.HTMLElementNode 41, // 34: memos.api.v1.Node.html_element_node:type_name -> memos.api.v1.HTMLElementNode
9, // 35: memos.api.v1.ParagraphNode.children:type_name -> memos.api.v1.Node 10, // 35: memos.api.v1.ParagraphNode.children:type_name -> memos.api.v1.Node
9, // 36: memos.api.v1.HeadingNode.children:type_name -> memos.api.v1.Node 10, // 36: memos.api.v1.HeadingNode.children:type_name -> memos.api.v1.Node
9, // 37: memos.api.v1.BlockquoteNode.children:type_name -> memos.api.v1.Node 10, // 37: memos.api.v1.BlockquoteNode.children:type_name -> memos.api.v1.Node
9, // 38: memos.api.v1.ListNode.children:type_name -> memos.api.v1.Node 1, // 38: memos.api.v1.ListNode.kind:type_name -> memos.api.v1.ListNode.Kind
9, // 39: memos.api.v1.OrderedListItemNode.children:type_name -> memos.api.v1.Node 10, // 39: memos.api.v1.ListNode.children:type_name -> memos.api.v1.Node
9, // 40: memos.api.v1.UnorderedListItemNode.children:type_name -> memos.api.v1.Node 10, // 40: memos.api.v1.OrderedListItemNode.children:type_name -> memos.api.v1.Node
9, // 41: memos.api.v1.TaskListItemNode.children:type_name -> memos.api.v1.Node 10, // 41: memos.api.v1.UnorderedListItemNode.children:type_name -> memos.api.v1.Node
9, // 42: memos.api.v1.TableNode.header:type_name -> memos.api.v1.Node 10, // 42: memos.api.v1.TaskListItemNode.children:type_name -> memos.api.v1.Node
41, // 43: memos.api.v1.TableNode.rows:type_name -> memos.api.v1.TableNode.Row 10, // 43: memos.api.v1.TableNode.header:type_name -> memos.api.v1.Node
9, // 44: memos.api.v1.BoldNode.children:type_name -> memos.api.v1.Node 42, // 44: memos.api.v1.TableNode.rows:type_name -> memos.api.v1.TableNode.Row
42, // 45: memos.api.v1.HTMLElementNode.attributes:type_name -> memos.api.v1.HTMLElementNode.AttributesEntry 10, // 45: memos.api.v1.BoldNode.children:type_name -> memos.api.v1.Node
9, // 46: memos.api.v1.TableNode.Row.cells:type_name -> memos.api.v1.Node 43, // 46: memos.api.v1.HTMLElementNode.attributes:type_name -> memos.api.v1.HTMLElementNode.AttributesEntry
1, // 47: memos.api.v1.MarkdownService.ParseMarkdown:input_type -> memos.api.v1.ParseMarkdownRequest 10, // 47: memos.api.v1.TableNode.Row.cells:type_name -> memos.api.v1.Node
3, // 48: memos.api.v1.MarkdownService.RestoreMarkdownNodes:input_type -> memos.api.v1.RestoreMarkdownNodesRequest 2, // 48: memos.api.v1.MarkdownService.ParseMarkdown:input_type -> memos.api.v1.ParseMarkdownRequest
5, // 49: memos.api.v1.MarkdownService.StringifyMarkdownNodes:input_type -> memos.api.v1.StringifyMarkdownNodesRequest 4, // 49: memos.api.v1.MarkdownService.RestoreMarkdownNodes:input_type -> memos.api.v1.RestoreMarkdownNodesRequest
7, // 50: memos.api.v1.MarkdownService.GetLinkMetadata:input_type -> memos.api.v1.GetLinkMetadataRequest 6, // 50: memos.api.v1.MarkdownService.StringifyMarkdownNodes:input_type -> memos.api.v1.StringifyMarkdownNodesRequest
2, // 51: memos.api.v1.MarkdownService.ParseMarkdown:output_type -> memos.api.v1.ParseMarkdownResponse 8, // 51: memos.api.v1.MarkdownService.GetLinkMetadata:input_type -> memos.api.v1.GetLinkMetadataRequest
4, // 52: memos.api.v1.MarkdownService.RestoreMarkdownNodes:output_type -> memos.api.v1.RestoreMarkdownNodesResponse 3, // 52: memos.api.v1.MarkdownService.ParseMarkdown:output_type -> memos.api.v1.ParseMarkdownResponse
6, // 53: memos.api.v1.MarkdownService.StringifyMarkdownNodes:output_type -> memos.api.v1.StringifyMarkdownNodesResponse 5, // 53: memos.api.v1.MarkdownService.RestoreMarkdownNodes:output_type -> memos.api.v1.RestoreMarkdownNodesResponse
8, // 54: memos.api.v1.MarkdownService.GetLinkMetadata:output_type -> memos.api.v1.LinkMetadata 7, // 54: memos.api.v1.MarkdownService.StringifyMarkdownNodes:output_type -> memos.api.v1.StringifyMarkdownNodesResponse
51, // [51:55] is the sub-list for method output_type 9, // 55: memos.api.v1.MarkdownService.GetLinkMetadata:output_type -> memos.api.v1.LinkMetadata
47, // [47:51] is the sub-list for method input_type 52, // [52:56] is the sub-list for method output_type
47, // [47:47] is the sub-list for extension type_name 48, // [48:52] is the sub-list for method input_type
47, // [47:47] is the sub-list for extension extendee 48, // [48:48] is the sub-list for extension type_name
0, // [0:47] is the sub-list for field type_name 48, // [48:48] is the sub-list for extension extendee
0, // [0:48] is the sub-list for field type_name
} }
func init() { file_api_v1_markdown_service_proto_init() } func init() { file_api_v1_markdown_service_proto_init() }
@ -3764,7 +3843,7 @@ func file_api_v1_markdown_service_proto_init() {
File: protoimpl.DescBuilder{ File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_api_v1_markdown_service_proto_rawDesc, RawDescriptor: file_api_v1_markdown_service_proto_rawDesc,
NumEnums: 1, NumEnums: 2,
NumMessages: 42, NumMessages: 42,
NumExtensions: 0, NumExtensions: 0,
NumServices: 1, NumServices: 1,

@ -77,7 +77,7 @@ func convertFromASTNode(rawNode ast.Node) *v1pb.Node {
node.Node = &v1pb.Node_BlockquoteNode{BlockquoteNode: &v1pb.BlockquoteNode{Children: children}} node.Node = &v1pb.Node_BlockquoteNode{BlockquoteNode: &v1pb.BlockquoteNode{Children: children}}
case *ast.List: case *ast.List:
children := convertFromASTNodes(n.Children) children := convertFromASTNodes(n.Children)
node.Node = &v1pb.Node_ListNode{ListNode: &v1pb.ListNode{Children: children}} node.Node = &v1pb.Node_ListNode{ListNode: &v1pb.ListNode{Kind: convertListKindFromASTNode(n.Kind), Indent: int32(n.Indent), Children: children}}
case *ast.OrderedListItem: case *ast.OrderedListItem:
children := convertFromASTNodes(n.Children) children := convertFromASTNodes(n.Children)
node.Node = &v1pb.Node_OrderedListItemNode{OrderedListItemNode: &v1pb.OrderedListItemNode{Number: n.Number, Indent: int32(n.Indent), Children: children}} node.Node = &v1pb.Node_OrderedListItemNode{OrderedListItemNode: &v1pb.OrderedListItemNode{Number: n.Number, Indent: int32(n.Indent), Children: children}}
@ -156,6 +156,19 @@ func convertTableFromASTNode(node *ast.Table) *v1pb.TableNode {
return table return table
} }
func convertListKindFromASTNode(node ast.ListKind) v1pb.ListNode_Kind {
switch node {
case ast.OrderedList:
return v1pb.ListNode_ORDERED
case ast.UnorderedList:
return v1pb.ListNode_UNORDERED
case ast.DescrpitionList:
return v1pb.ListNode_DESCRIPTION
default:
return v1pb.ListNode_KIND_UNSPECIFIED
}
}
func convertToASTNode(node *v1pb.Node) ast.Node { func convertToASTNode(node *v1pb.Node) ast.Node {
switch n := node.Node.(type) { switch n := node.Node.(type) {
case *v1pb.Node_LineBreakNode: case *v1pb.Node_LineBreakNode:
@ -175,7 +188,7 @@ func convertToASTNode(node *v1pb.Node) ast.Node {
return &ast.Blockquote{Children: children} return &ast.Blockquote{Children: children}
case *v1pb.Node_ListNode: case *v1pb.Node_ListNode:
children := convertToASTNodes(n.ListNode.Children) children := convertToASTNodes(n.ListNode.Children)
return &ast.List{Children: children} return &ast.List{Kind: convertListKindToASTNode(n.ListNode.Kind), Indent: int(n.ListNode.Indent), Children: children}
case *v1pb.Node_OrderedListItemNode: case *v1pb.Node_OrderedListItemNode:
children := convertToASTNodes(n.OrderedListItemNode.Children) children := convertToASTNodes(n.OrderedListItemNode.Children)
return &ast.OrderedListItem{Number: n.OrderedListItemNode.Number, Indent: int(n.OrderedListItemNode.Indent), Children: children} return &ast.OrderedListItem{Number: n.OrderedListItemNode.Number, Indent: int(n.OrderedListItemNode.Indent), Children: children}
@ -252,3 +265,17 @@ func convertTableToASTNode(node *v1pb.TableNode) *ast.Table {
} }
return table return table
} }
func convertListKindToASTNode(kind v1pb.ListNode_Kind) ast.ListKind {
switch kind {
case v1pb.ListNode_ORDERED:
return ast.OrderedList
case v1pb.ListNode_UNORDERED:
return ast.UnorderedList
case v1pb.ListNode_DESCRIPTION:
return ast.DescrpitionList
default:
// Default to description list.
return ast.DescrpitionList
}
}

@ -1,18 +1,41 @@
import { Node, NodeType } from "@/types/proto/api/v1/markdown_service"; import clsx from "clsx";
import React from "react";
import { ListNode_Kind, Node, NodeType } from "@/types/proto/api/v1/markdown_service";
import Renderer from "./Renderer"; import Renderer from "./Renderer";
interface Props { interface Props {
index: string; index: string;
kind: ListNode_Kind;
indent: number;
children: Node[]; children: Node[];
} }
const List: React.FC<Props> = ({ children }: Props) => { const List: React.FC<Props> = ({ kind, indent, children }: Props) => {
let prevNode: Node | null = null; let prevNode: Node | null = null;
let skipNextLineBreakFlag = false; let skipNextLineBreakFlag = false;
return ( const getListContainer = (kind: ListNode_Kind) => {
<dl> switch (kind) {
{children.map((child, index) => { case ListNode_Kind.ORDERED:
return "ol";
case ListNode_Kind.UNORDERED:
return "ul";
case ListNode_Kind.DESCRIPTION:
return "dl";
default:
return "div";
}
};
return React.createElement(
getListContainer(kind),
{
className: clsx(
`list-inside ${kind === ListNode_Kind.ORDERED ? "list-decimal" : kind === ListNode_Kind.UNORDERED ? "list-disc" : "list-none"}`,
indent > 0 ? `pl-${2 * indent}` : "",
),
},
children.map((child, index) => {
if (prevNode?.type !== NodeType.LINE_BREAK && child.type === NodeType.LINE_BREAK && skipNextLineBreakFlag) { if (prevNode?.type !== NodeType.LINE_BREAK && child.type === NodeType.LINE_BREAK && skipNextLineBreakFlag) {
skipNextLineBreakFlag = false; skipNextLineBreakFlag = false;
return null; return null;
@ -21,8 +44,7 @@ const List: React.FC<Props> = ({ children }: Props) => {
prevNode = child; prevNode = child;
skipNextLineBreakFlag = true; skipNextLineBreakFlag = true;
return <Renderer key={`${child.type}-${index}`} index={String(index)} node={child} />; return <Renderer key={`${child.type}-${index}`} index={String(index)} node={child} />;
})} }),
</dl>
); );
}; };

@ -1,4 +1,3 @@
import { repeat } from "lodash-es";
import { Node } from "@/types/proto/api/v1/markdown_service"; import { Node } from "@/types/proto/api/v1/markdown_service";
import Renderer from "./Renderer"; import Renderer from "./Renderer";
import { BaseProps } from "./types"; import { BaseProps } from "./types";
@ -9,24 +8,12 @@ interface Props extends BaseProps {
children: Node[]; children: Node[];
} }
const OrderedListItem: React.FC<Props> = ({ number, indent, children }: Props) => { const OrderedListItem: React.FC<Props> = ({ children }: Props) => {
return ( return (
<li className="w-full flex flex-row"> <li>
{indent > 0 && (
<div className="block font-mono shrink-0">
<span>{repeat(" ", indent)}</span>
</div>
)}
<div className="w-auto grid grid-cols-[24px_1fr] gap-1">
<div className="w-7 h-6 flex justify-center items-center">
<span className="opacity-80">{number}.</span>
</div>
<div>
{children.map((child, index) => ( {children.map((child, index) => (
<Renderer key={`${child.type}-${index}`} index={String(index)} node={child} /> <Renderer key={`${child.type}-${index}`} index={String(index)} node={child} />
))} ))}
</div>
</div>
</li> </li>
); );
}; };

@ -1,6 +1,5 @@
import { Checkbox } from "@mui/joy"; import { Checkbox } from "@mui/joy";
import clsx from "clsx"; import clsx from "clsx";
import { repeat } from "lodash-es";
import { useContext, useState } from "react"; import { useContext, useState } from "react";
import { markdownServiceClient } from "@/grpcweb"; import { markdownServiceClient } from "@/grpcweb";
import { useMemoStore } from "@/store/v1"; import { useMemoStore } from "@/store/v1";
@ -17,7 +16,7 @@ interface Props {
children: Node[]; children: Node[];
} }
const TaskListItem: React.FC<Props> = ({ node, indent, complete, children }: Props) => { const TaskListItem: React.FC<Props> = ({ node, complete, children }: Props) => {
const context = useContext(RendererContext); const context = useContext(RendererContext);
const memoStore = useMemoStore(); const memoStore = useMemoStore();
const [checked] = useState(complete); const [checked] = useState(complete);
@ -39,22 +38,15 @@ const TaskListItem: React.FC<Props> = ({ node, indent, complete, children }: Pro
}; };
return ( return (
<li className="w-full flex flex-row"> <li className={clsx("w-full grid grid-cols-[24px_1fr]")}>
{indent > 0 && ( <span className="w-6 h-6 flex justify-start items-center">
<div className="block font-mono shrink-0">
<span>{repeat(" ", indent)}</span>
</div>
)}
<div className="w-auto grid grid-cols-[24px_1fr] gap-1">
<div className="w-7 h-6 flex justify-center items-center">
<Checkbox size="sm" checked={checked} disabled={context.readonly} onChange={(e) => handleCheckboxChange(e.target.checked)} /> <Checkbox size="sm" checked={checked} disabled={context.readonly} onChange={(e) => handleCheckboxChange(e.target.checked)} />
</div> </span>
<div className={clsx(complete && "line-through opacity-80")}> <p className={clsx(complete && "line-through opacity-80")}>
{children.map((child, index) => ( {children.map((child, index) => (
<Renderer key={`${child.type}-${index}`} index={String(index)} node={child} /> <Renderer key={`${child.type}-${index}`} index={String(index)} node={child} />
))} ))}
</div> </p>
</div>
</li> </li>
); );
}; };

@ -1,4 +1,3 @@
import { repeat } from "lodash-es";
import { Node } from "@/types/proto/api/v1/markdown_service"; import { Node } from "@/types/proto/api/v1/markdown_service";
import Renderer from "./Renderer"; import Renderer from "./Renderer";
@ -8,24 +7,12 @@ interface Props {
children: Node[]; children: Node[];
} }
const UnorderedListItem: React.FC<Props> = ({ indent, children }: Props) => { const UnorderedListItem: React.FC<Props> = ({ children }: Props) => {
return ( return (
<li className="w-full flex flex-row"> <li>
{indent > 0 && (
<div className="block font-mono shrink-0">
<span>{repeat(" ", indent)}</span>
</div>
)}
<div className="w-auto grid grid-cols-[24px_1fr] gap-1">
<div className="w-7 h-6 flex justify-center items-center">
<span className="opacity-80"></span>
</div>
<div>
{children.map((child, index) => ( {children.map((child, index) => (
<Renderer key={`${child.type}-${index}`} index={String(index)} node={child} /> <Renderer key={`${child.type}-${index}`} index={String(index)} node={child} />
))} ))}
</div>
</div>
</li> </li>
); );
}; };

@ -443,7 +443,7 @@ const MemoEditor = (props: Props) => {
<AddMemoRelationPopover editorRef={editorRef} /> <AddMemoRelationPopover editorRef={editorRef} />
</div> </div>
</div> </div>
<Divider className="!mt-2" /> <Divider className="!mt-2 opacity-40" />
<div className="w-full flex flex-row justify-between items-center py-3 dark:border-t-zinc-500"> <div className="w-full flex flex-row justify-between items-center py-3 dark:border-t-zinc-500">
<div className="relative flex flex-row justify-start items-center" onFocus={(e) => e.stopPropagation()}> <div className="relative flex flex-row justify-start items-center" onFocus={(e) => e.stopPropagation()}>
<Select <Select

@ -23,8 +23,8 @@ const UserBanner = (props: Props) => {
const workspaceSettingStore = useWorkspaceSettingStore(); const workspaceSettingStore = useWorkspaceSettingStore();
const workspaceGeneralSetting = const workspaceGeneralSetting =
workspaceSettingStore.getWorkspaceSettingByKey(WorkspaceSettingKey.GENERAL).generalSetting || WorkspaceGeneralSetting.fromPartial({}); workspaceSettingStore.getWorkspaceSettingByKey(WorkspaceSettingKey.GENERAL).generalSetting || WorkspaceGeneralSetting.fromPartial({});
const title = user ? user.nickname || user.username : workspaceGeneralSetting.customProfile?.title; const title = (user ? user.nickname || user.username : workspaceGeneralSetting.customProfile?.title) || "Memos";
const avatarUrl = user ? user.avatarUrl : workspaceGeneralSetting.customProfile?.logoUrl; const avatarUrl = (user ? user.avatarUrl : workspaceGeneralSetting.customProfile?.logoUrl) || "/logo.webp";
const handleSignOut = async () => { const handleSignOut = async () => {
await authServiceClient.signOut({}); await authServiceClient.signOut({});

@ -81,20 +81,6 @@ module.exports = {
md: "calc(var(--radius) - 2px)", md: "calc(var(--radius) - 2px)",
sm: "calc(var(--radius) - 4px)", sm: "calc(var(--radius) - 4px)",
}, },
keyframes: {
"accordion-down": {
from: { height: "0" },
to: { height: "var(--radix-accordion-content-height)" },
},
"accordion-up": {
from: { height: "var(--radix-accordion-content-height)" },
to: { height: "0" },
},
},
animation: {
"accordion-down": "accordion-down 0.2s ease-out",
"accordion-up": "accordion-up 0.2s ease-out",
},
}, },
}, },
plugins: [require("tailwindcss-animate")], plugins: [require("tailwindcss-animate")],

@ -1,8 +0,0 @@
{
"rewrites": [
{
"source": "/(.*)",
"destination": "/index.html"
}
]
}
Loading…
Cancel
Save