chore(all): auto-regenerate .pb.go files (#1112)
This is an auto-generated regeneration of the .pb.go files by
cloud.google.com/go/internal/gapicgen. Once this PR is submitted, genbot will
update the corresponding PR to depend on the newer version of go-genproto, and
assign reviewers. Whilst this or any regen PR is open in go-genproto, genbot
will not create any more regeneration PRs. If all regen PRs are closed,
gapicgen will create a new set of regeneration PRs once per night.
If you have been assigned to review this PR, please:
- Ensure that CI is passing. If it's failing, it requires your manual attention.
- Approve and submit this PR if you believe it's ready to ship. That will prompt
genbot to assign reviewers to the google-cloud-go PR.
There is no corresponding google-cloud-go PR.
Changes:
docs:card proto update feat: material icon in card
PiperOrigin-RevId: 624942359
Source-Link: https://togithub.com/googleapis/googleapis/commit/436a34a5da04978e98859afe7487ce93d08e9c03
chore: regenerate API index
Source-Link: https://togithub.com/googleapis/googleapis/commit/113a378d5aad5018876ec0a8cbfd4d6a4f746809
feat: add model_monitor resource and APIs to public v1beta1 client library
PiperOrigin-RevId: 624288685
Source-Link: https://togithub.com/googleapis/googleapis/commit/b5d0197dce43a7c81a38573b5c1efc8da14a27df
fix!: mark parent/name fields with the REQUIRED field_behavior annotation docs: updated comments
PiperOrigin-RevId: 624277410
Source-Link: https://togithub.com/googleapis/googleapis/commit/2d881be8c566e4c374061248dd205efd72b7ef4f
chore: add license and generated code headers to generated resource files
PiperOrigin-RevId: 624246268
Source-Link: https://togithub.com/googleapis/googleapis/commit/72bfeaddd3b2efa3d8cb176f28d2d3c324271103
feat: add PHP geo common protos and new surfaces for Maps Fleetengine PHP
PiperOrigin-RevId: 624246100
Source-Link: https://togithub.com/googleapis/googleapis/commit/84d7f78a42e1e19f02960a4dd159e4c79d4a5335
chore: regenerate API index
Source-Link: https://togithub.com/googleapis/googleapis/commit/b9352ebb4ca015c712b673f92fd732e32c1dc7b4
docs: Various updates
PiperOrigin-RevId: 624233552
Source-Link: https://togithub.com/googleapis/googleapis/commit/1413b13ee1741183772b57481d5f9a99c9bdc129
diff --git a/go.work.sum b/go.work.sum
index 14b6d21..cb45cc7 100644
--- a/go.work.sum
+++ b/go.work.sum
@@ -76,7 +76,9 @@
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -85,6 +87,7 @@
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
@@ -208,6 +211,7 @@
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
@@ -216,6 +220,7 @@
google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw=
google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg=
google.golang.org/api v0.170.0/go.mod h1:/xql9M2btF85xac/VAm4PsLMTLVGUOpq4BE9R8jyNy8=
+google.golang.org/api v0.172.0/go.mod h1:+fJZq6QXWfa9pXhnIzsjx4yI22d4aI9ZpLb58gvXjis=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
@@ -230,13 +235,18 @@
google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64=
google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro=
google.golang.org/genproto v0.0.0-20240205150955-31a09d347014/go.mod h1:xEgQu1e4stdSSsxPDK8Azkrk/ECl5HvdPf6nbZrTS5M=
+google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s=
google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8=
google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s=
google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA=
google.golang.org/genproto/googleapis/bytestream v0.0.0-20240311132316-a219d84964c2/go.mod h1:vh/N7795ftP0AkN1w8XKqN4w1OdUKXW5Eummda+ofv8=
+google.golang.org/genproto/googleapis/bytestream v0.0.0-20240318140521-94a12d6c2237/go.mod h1:IN9OQUXZ0xT+26MDwZL8fJcYw+y99b0eYPA2U15Jt8o=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240311132316-a219d84964c2/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
@@ -249,6 +259,7 @@
google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw=
google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@@ -259,6 +270,8 @@
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
diff --git a/googleapis/apps/card/v1/card.pb.go b/googleapis/apps/card/v1/card.pb.go
new file mode 100644
index 0000000..fae54ed
--- /dev/null
+++ b/googleapis/apps/card/v1/card.pb.go
@@ -0,0 +1,6448 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.26.0
+// protoc v4.24.4
+// source: google/apps/card/v1/card.proto
+
+package card
+
+import (
+ reflect "reflect"
+ sync "sync"
+
+ color "google.golang.org/genproto/googleapis/type/color"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// The divider style of a card. Currently only used for dividers betweens card
+// sections.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Card_DividerStyle int32
+
+const (
+ // Don't use. Unspecified.
+ Card_DIVIDER_STYLE_UNSPECIFIED Card_DividerStyle = 0
+ // Default option. Render a solid divider between sections.
+ Card_SOLID_DIVIDER Card_DividerStyle = 1
+ // If set, no divider is rendered between sections.
+ Card_NO_DIVIDER Card_DividerStyle = 2
+)
+
+// Enum value maps for Card_DividerStyle.
+var (
+ Card_DividerStyle_name = map[int32]string{
+ 0: "DIVIDER_STYLE_UNSPECIFIED",
+ 1: "SOLID_DIVIDER",
+ 2: "NO_DIVIDER",
+ }
+ Card_DividerStyle_value = map[string]int32{
+ "DIVIDER_STYLE_UNSPECIFIED": 0,
+ "SOLID_DIVIDER": 1,
+ "NO_DIVIDER": 2,
+ }
+)
+
+func (x Card_DividerStyle) Enum() *Card_DividerStyle {
+ p := new(Card_DividerStyle)
+ *p = x
+ return p
+}
+
+func (x Card_DividerStyle) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Card_DividerStyle) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[0].Descriptor()
+}
+
+func (Card_DividerStyle) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[0]
+}
+
+func (x Card_DividerStyle) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Card_DividerStyle.Descriptor instead.
+func (Card_DividerStyle) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 0}
+}
+
+// In Google Workspace Add-ons,
+// determines how a card is displayed.
+//
+// [Google Workspace
+// Add-ons](https://developers.google.com/workspace/add-ons):
+type Card_DisplayStyle int32
+
+const (
+ // Don't use. Unspecified.
+ Card_DISPLAY_STYLE_UNSPECIFIED Card_DisplayStyle = 0
+ // The header of the card appears at the bottom of the
+ // sidebar, partially covering the current top card of the stack. Clicking
+ // the header pops the card into the card stack. If the card has no header,
+ // a generated header is used instead.
+ Card_PEEK Card_DisplayStyle = 1
+ // Default value. The card is shown by replacing the view of the top card in
+ // the card stack.
+ Card_REPLACE Card_DisplayStyle = 2
+)
+
+// Enum value maps for Card_DisplayStyle.
+var (
+ Card_DisplayStyle_name = map[int32]string{
+ 0: "DISPLAY_STYLE_UNSPECIFIED",
+ 1: "PEEK",
+ 2: "REPLACE",
+ }
+ Card_DisplayStyle_value = map[string]int32{
+ "DISPLAY_STYLE_UNSPECIFIED": 0,
+ "PEEK": 1,
+ "REPLACE": 2,
+ }
+)
+
+func (x Card_DisplayStyle) Enum() *Card_DisplayStyle {
+ p := new(Card_DisplayStyle)
+ *p = x
+ return p
+}
+
+func (x Card_DisplayStyle) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Card_DisplayStyle) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[1].Descriptor()
+}
+
+func (Card_DisplayStyle) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[1]
+}
+
+func (x Card_DisplayStyle) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Card_DisplayStyle.Descriptor instead.
+func (Card_DisplayStyle) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 1}
+}
+
+// The shape used to crop the image.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Widget_ImageType int32
+
+const (
+ // Default value. Applies a square mask to the image. For example, a 4x3
+ // image becomes 3x3.
+ Widget_SQUARE Widget_ImageType = 0
+ // Applies a circular mask to the image. For example, a 4x3 image becomes a
+ // circle with a diameter of 3.
+ Widget_CIRCLE Widget_ImageType = 1
+)
+
+// Enum value maps for Widget_ImageType.
+var (
+ Widget_ImageType_name = map[int32]string{
+ 0: "SQUARE",
+ 1: "CIRCLE",
+ }
+ Widget_ImageType_value = map[string]int32{
+ "SQUARE": 0,
+ "CIRCLE": 1,
+ }
+)
+
+func (x Widget_ImageType) Enum() *Widget_ImageType {
+ p := new(Widget_ImageType)
+ *p = x
+ return p
+}
+
+func (x Widget_ImageType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Widget_ImageType) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[2].Descriptor()
+}
+
+func (Widget_ImageType) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[2]
+}
+
+func (x Widget_ImageType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Widget_ImageType.Descriptor instead.
+func (Widget_ImageType) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{1, 0}
+}
+
+// Specifies whether widgets align to the left, right, or center of a column.
+//
+// [Google Chat apps](https://developers.google.com/workspace/chat):
+type Widget_HorizontalAlignment int32
+
+const (
+ // Don't use. Unspecified.
+ Widget_HORIZONTAL_ALIGNMENT_UNSPECIFIED Widget_HorizontalAlignment = 0
+ // Default value. Aligns widgets to the start position of the column. For
+ // left-to-right layouts, aligns to the left. For right-to-left layouts,
+ // aligns to the right.
+ Widget_START Widget_HorizontalAlignment = 1
+ // Aligns widgets to the center of the column.
+ Widget_CENTER Widget_HorizontalAlignment = 2
+ // Aligns widgets to the end position of the column. For left-to-right
+ // layouts, aligns widgets to the right. For right-to-left layouts, aligns
+ // widgets to the left.
+ Widget_END Widget_HorizontalAlignment = 3
+)
+
+// Enum value maps for Widget_HorizontalAlignment.
+var (
+ Widget_HorizontalAlignment_name = map[int32]string{
+ 0: "HORIZONTAL_ALIGNMENT_UNSPECIFIED",
+ 1: "START",
+ 2: "CENTER",
+ 3: "END",
+ }
+ Widget_HorizontalAlignment_value = map[string]int32{
+ "HORIZONTAL_ALIGNMENT_UNSPECIFIED": 0,
+ "START": 1,
+ "CENTER": 2,
+ "END": 3,
+ }
+)
+
+func (x Widget_HorizontalAlignment) Enum() *Widget_HorizontalAlignment {
+ p := new(Widget_HorizontalAlignment)
+ *p = x
+ return p
+}
+
+func (x Widget_HorizontalAlignment) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Widget_HorizontalAlignment) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[3].Descriptor()
+}
+
+func (Widget_HorizontalAlignment) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[3]
+}
+
+func (x Widget_HorizontalAlignment) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Widget_HorizontalAlignment.Descriptor instead.
+func (Widget_HorizontalAlignment) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{1, 1}
+}
+
+// How the switch appears in the user interface.
+//
+// [Google Workspace Add-ons
+// and Chat apps](https://developers.google.com/workspace/extend):
+type DecoratedText_SwitchControl_ControlType int32
+
+const (
+ // A toggle-style switch.
+ DecoratedText_SwitchControl_SWITCH DecoratedText_SwitchControl_ControlType = 0
+ // Deprecated in favor of `CHECK_BOX`.
+ DecoratedText_SwitchControl_CHECKBOX DecoratedText_SwitchControl_ControlType = 1
+ // A checkbox.
+ DecoratedText_SwitchControl_CHECK_BOX DecoratedText_SwitchControl_ControlType = 2
+)
+
+// Enum value maps for DecoratedText_SwitchControl_ControlType.
+var (
+ DecoratedText_SwitchControl_ControlType_name = map[int32]string{
+ 0: "SWITCH",
+ 1: "CHECKBOX",
+ 2: "CHECK_BOX",
+ }
+ DecoratedText_SwitchControl_ControlType_value = map[string]int32{
+ "SWITCH": 0,
+ "CHECKBOX": 1,
+ "CHECK_BOX": 2,
+ }
+)
+
+func (x DecoratedText_SwitchControl_ControlType) Enum() *DecoratedText_SwitchControl_ControlType {
+ p := new(DecoratedText_SwitchControl_ControlType)
+ *p = x
+ return p
+}
+
+func (x DecoratedText_SwitchControl_ControlType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (DecoratedText_SwitchControl_ControlType) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[4].Descriptor()
+}
+
+func (DecoratedText_SwitchControl_ControlType) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[4]
+}
+
+func (x DecoratedText_SwitchControl_ControlType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use DecoratedText_SwitchControl_ControlType.Descriptor instead.
+func (DecoratedText_SwitchControl_ControlType) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{5, 0, 0}
+}
+
+// How a text input field appears in the user interface. For example,
+// whether it's a single line input field, or a multi-line input. If
+// `initialSuggestions` is specified, `type` is always `SINGLE_LINE`,
+// even if it's set to `MULTIPLE_LINE`.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type TextInput_Type int32
+
+const (
+ // The text input field has a fixed height of one line.
+ TextInput_SINGLE_LINE TextInput_Type = 0
+ // The text input field has a fixed height of multiple lines.
+ TextInput_MULTIPLE_LINE TextInput_Type = 1
+)
+
+// Enum value maps for TextInput_Type.
+var (
+ TextInput_Type_name = map[int32]string{
+ 0: "SINGLE_LINE",
+ 1: "MULTIPLE_LINE",
+ }
+ TextInput_Type_value = map[string]int32{
+ "SINGLE_LINE": 0,
+ "MULTIPLE_LINE": 1,
+ }
+)
+
+func (x TextInput_Type) Enum() *TextInput_Type {
+ p := new(TextInput_Type)
+ *p = x
+ return p
+}
+
+func (x TextInput_Type) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (TextInput_Type) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[5].Descriptor()
+}
+
+func (TextInput_Type) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[5]
+}
+
+func (x TextInput_Type) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use TextInput_Type.Descriptor instead.
+func (TextInput_Type) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{6, 0}
+}
+
+// The format for the items that users can select. Different options support
+// different types of interactions. For example, users can select multiple
+// checkboxes, but can only select one item from a dropdown menu.
+//
+// Each selection input supports one type of selection. Mixing checkboxes
+// and switches, for example, isn't supported.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type SelectionInput_SelectionType int32
+
+const (
+ // A set of checkboxes. Users can select one or more checkboxes.
+ SelectionInput_CHECK_BOX SelectionInput_SelectionType = 0
+ // A set of radio buttons. Users can select one radio button.
+ SelectionInput_RADIO_BUTTON SelectionInput_SelectionType = 1
+ // A set of switches. Users can turn on one or more switches.
+ SelectionInput_SWITCH SelectionInput_SelectionType = 2
+ // A dropdown menu. Users can select one item from the menu.
+ SelectionInput_DROPDOWN SelectionInput_SelectionType = 3
+ // A multiselect menu for static or dynamic data. From the menu bar,
+ // users select one or more items. Users can also input values to populate
+ // dynamic data. For example, users can start typing the name of a Google
+ // Chat space and the widget autosuggests the space.
+ //
+ // To populate items for a multiselect menu, you can use one of the
+ // following types of data sources:
+ //
+ // - Static data: Items are specified as `SelectionItem` objects in the
+ // widget. Up to 100 items.
+ // - Google Workspace data: Items are populated using data from Google
+ // Workspace, such as Google Workspace users or Google Chat spaces.
+ // - External data: Items are populated from an external data
+ // source outside of Google Workspace.
+ //
+ // For examples of how to implement multiselect menus, see
+ // [Add a multiselect
+ // menu](https://developers.google.com/workspace/chat/design-interactive-card-dialog#multiselect-menu).
+ //
+ // [Google Workspace Add-ons and Chat
+ // apps](https://developers.google.com/workspace/extend):
+ // Multiselect for Google Workspace Add-ons are in
+ // Developer Preview.
+ SelectionInput_MULTI_SELECT SelectionInput_SelectionType = 4
+)
+
+// Enum value maps for SelectionInput_SelectionType.
+var (
+ SelectionInput_SelectionType_name = map[int32]string{
+ 0: "CHECK_BOX",
+ 1: "RADIO_BUTTON",
+ 2: "SWITCH",
+ 3: "DROPDOWN",
+ 4: "MULTI_SELECT",
+ }
+ SelectionInput_SelectionType_value = map[string]int32{
+ "CHECK_BOX": 0,
+ "RADIO_BUTTON": 1,
+ "SWITCH": 2,
+ "DROPDOWN": 3,
+ "MULTI_SELECT": 4,
+ }
+)
+
+func (x SelectionInput_SelectionType) Enum() *SelectionInput_SelectionType {
+ p := new(SelectionInput_SelectionType)
+ *p = x
+ return p
+}
+
+func (x SelectionInput_SelectionType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SelectionInput_SelectionType) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[6].Descriptor()
+}
+
+func (SelectionInput_SelectionType) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[6]
+}
+
+func (x SelectionInput_SelectionType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SelectionInput_SelectionType.Descriptor instead.
+func (SelectionInput_SelectionType) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9, 0}
+}
+
+// A data source shared by all [Google Workspace
+// applications]
+// (https://developers.google.com/workspace/chat/api/reference/rest/v1/HostApp).
+//
+// [Google Chat apps](https://developers.google.com/workspace/chat):
+type SelectionInput_PlatformDataSource_CommonDataSource int32
+
+const (
+ // Default value. Don't use.
+ SelectionInput_PlatformDataSource_UNKNOWN SelectionInput_PlatformDataSource_CommonDataSource = 0
+ // Google Workspace users. The user can only view and select users from
+ // their Google Workspace organization.
+ SelectionInput_PlatformDataSource_USER SelectionInput_PlatformDataSource_CommonDataSource = 1
+)
+
+// Enum value maps for SelectionInput_PlatformDataSource_CommonDataSource.
+var (
+ SelectionInput_PlatformDataSource_CommonDataSource_name = map[int32]string{
+ 0: "UNKNOWN",
+ 1: "USER",
+ }
+ SelectionInput_PlatformDataSource_CommonDataSource_value = map[string]int32{
+ "UNKNOWN": 0,
+ "USER": 1,
+ }
+)
+
+func (x SelectionInput_PlatformDataSource_CommonDataSource) Enum() *SelectionInput_PlatformDataSource_CommonDataSource {
+ p := new(SelectionInput_PlatformDataSource_CommonDataSource)
+ *p = x
+ return p
+}
+
+func (x SelectionInput_PlatformDataSource_CommonDataSource) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SelectionInput_PlatformDataSource_CommonDataSource) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[7].Descriptor()
+}
+
+func (SelectionInput_PlatformDataSource_CommonDataSource) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[7]
+}
+
+func (x SelectionInput_PlatformDataSource_CommonDataSource) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SelectionInput_PlatformDataSource_CommonDataSource.Descriptor instead.
+func (SelectionInput_PlatformDataSource_CommonDataSource) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9, 1, 0}
+}
+
+// The format for the date and time in the `DateTimePicker` widget.
+// Determines whether users can input a date, a time, or both a date and time.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type DateTimePicker_DateTimePickerType int32
+
+const (
+ // Users input a date and time.
+ DateTimePicker_DATE_AND_TIME DateTimePicker_DateTimePickerType = 0
+ // Users input a date.
+ DateTimePicker_DATE_ONLY DateTimePicker_DateTimePickerType = 1
+ // Users input a time.
+ DateTimePicker_TIME_ONLY DateTimePicker_DateTimePickerType = 2
+)
+
+// Enum value maps for DateTimePicker_DateTimePickerType.
+var (
+ DateTimePicker_DateTimePickerType_name = map[int32]string{
+ 0: "DATE_AND_TIME",
+ 1: "DATE_ONLY",
+ 2: "TIME_ONLY",
+ }
+ DateTimePicker_DateTimePickerType_value = map[string]int32{
+ "DATE_AND_TIME": 0,
+ "DATE_ONLY": 1,
+ "TIME_ONLY": 2,
+ }
+)
+
+func (x DateTimePicker_DateTimePickerType) Enum() *DateTimePicker_DateTimePickerType {
+ p := new(DateTimePicker_DateTimePickerType)
+ *p = x
+ return p
+}
+
+func (x DateTimePicker_DateTimePickerType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (DateTimePicker_DateTimePickerType) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[8].Descriptor()
+}
+
+func (DateTimePicker_DateTimePickerType) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[8]
+}
+
+func (x DateTimePicker_DateTimePickerType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use DateTimePicker_DateTimePickerType.Descriptor instead.
+func (DateTimePicker_DateTimePickerType) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{10, 0}
+}
+
+// Represents the crop style applied to an image.
+//
+// [Google Workspace Add-ons
+// and Chat apps](https://developers.google.com/workspace/extend):
+type ImageCropStyle_ImageCropType int32
+
+const (
+ // Don't use. Unspecified.
+ ImageCropStyle_IMAGE_CROP_TYPE_UNSPECIFIED ImageCropStyle_ImageCropType = 0
+ // Default value. Applies a square crop.
+ ImageCropStyle_SQUARE ImageCropStyle_ImageCropType = 1
+ // Applies a circular crop.
+ ImageCropStyle_CIRCLE ImageCropStyle_ImageCropType = 2
+ // Applies a rectangular crop with a custom aspect ratio. Set the custom
+ // aspect ratio with `aspectRatio`.
+ ImageCropStyle_RECTANGLE_CUSTOM ImageCropStyle_ImageCropType = 3
+ // Applies a rectangular crop with a 4:3 aspect ratio.
+ ImageCropStyle_RECTANGLE_4_3 ImageCropStyle_ImageCropType = 4
+)
+
+// Enum value maps for ImageCropStyle_ImageCropType.
+var (
+ ImageCropStyle_ImageCropType_name = map[int32]string{
+ 0: "IMAGE_CROP_TYPE_UNSPECIFIED",
+ 1: "SQUARE",
+ 2: "CIRCLE",
+ 3: "RECTANGLE_CUSTOM",
+ 4: "RECTANGLE_4_3",
+ }
+ ImageCropStyle_ImageCropType_value = map[string]int32{
+ "IMAGE_CROP_TYPE_UNSPECIFIED": 0,
+ "SQUARE": 1,
+ "CIRCLE": 2,
+ "RECTANGLE_CUSTOM": 3,
+ "RECTANGLE_4_3": 4,
+ }
+)
+
+func (x ImageCropStyle_ImageCropType) Enum() *ImageCropStyle_ImageCropType {
+ p := new(ImageCropStyle_ImageCropType)
+ *p = x
+ return p
+}
+
+func (x ImageCropStyle_ImageCropType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ImageCropStyle_ImageCropType) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[9].Descriptor()
+}
+
+func (ImageCropStyle_ImageCropType) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[9]
+}
+
+func (x ImageCropStyle_ImageCropType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ImageCropStyle_ImageCropType.Descriptor instead.
+func (ImageCropStyle_ImageCropType) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{14, 0}
+}
+
+// Represents the border types applied to widgets.
+//
+// [Google Workspace Add-ons
+// and Chat apps](https://developers.google.com/workspace/extend):
+type BorderStyle_BorderType int32
+
+const (
+ // Don't use. Unspecified.
+ BorderStyle_BORDER_TYPE_UNSPECIFIED BorderStyle_BorderType = 0
+ // Default value. No border.
+ BorderStyle_NO_BORDER BorderStyle_BorderType = 1
+ // Outline.
+ BorderStyle_STROKE BorderStyle_BorderType = 2
+)
+
+// Enum value maps for BorderStyle_BorderType.
+var (
+ BorderStyle_BorderType_name = map[int32]string{
+ 0: "BORDER_TYPE_UNSPECIFIED",
+ 1: "NO_BORDER",
+ 2: "STROKE",
+ }
+ BorderStyle_BorderType_value = map[string]int32{
+ "BORDER_TYPE_UNSPECIFIED": 0,
+ "NO_BORDER": 1,
+ "STROKE": 2,
+ }
+)
+
+func (x BorderStyle_BorderType) Enum() *BorderStyle_BorderType {
+ p := new(BorderStyle_BorderType)
+ *p = x
+ return p
+}
+
+func (x BorderStyle_BorderType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (BorderStyle_BorderType) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[10].Descriptor()
+}
+
+func (BorderStyle_BorderType) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[10]
+}
+
+func (x BorderStyle_BorderType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use BorderStyle_BorderType.Descriptor instead.
+func (BorderStyle_BorderType) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{15, 0}
+}
+
+// Represents the various layout options available for a grid item.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Grid_GridItem_GridItemLayout int32
+
+const (
+ // Don't use. Unspecified.
+ Grid_GridItem_GRID_ITEM_LAYOUT_UNSPECIFIED Grid_GridItem_GridItemLayout = 0
+ // The title and subtitle are shown below the grid item's image.
+ Grid_GridItem_TEXT_BELOW Grid_GridItem_GridItemLayout = 1
+ // The title and subtitle are shown above the grid item's image.
+ Grid_GridItem_TEXT_ABOVE Grid_GridItem_GridItemLayout = 2
+)
+
+// Enum value maps for Grid_GridItem_GridItemLayout.
+var (
+ Grid_GridItem_GridItemLayout_name = map[int32]string{
+ 0: "GRID_ITEM_LAYOUT_UNSPECIFIED",
+ 1: "TEXT_BELOW",
+ 2: "TEXT_ABOVE",
+ }
+ Grid_GridItem_GridItemLayout_value = map[string]int32{
+ "GRID_ITEM_LAYOUT_UNSPECIFIED": 0,
+ "TEXT_BELOW": 1,
+ "TEXT_ABOVE": 2,
+ }
+)
+
+func (x Grid_GridItem_GridItemLayout) Enum() *Grid_GridItem_GridItemLayout {
+ p := new(Grid_GridItem_GridItemLayout)
+ *p = x
+ return p
+}
+
+func (x Grid_GridItem_GridItemLayout) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Grid_GridItem_GridItemLayout) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[11].Descriptor()
+}
+
+func (Grid_GridItem_GridItemLayout) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[11]
+}
+
+func (x Grid_GridItem_GridItemLayout) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Grid_GridItem_GridItemLayout.Descriptor instead.
+func (Grid_GridItem_GridItemLayout) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{17, 0, 0}
+}
+
+// Specifies how a column fills the width of the card. The width of each
+// column depends on both the `HorizontalSizeStyle` and the width of the
+// widgets within the column.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+// Columns for Google Workspace Add-ons are in
+// Developer Preview.
+type Columns_Column_HorizontalSizeStyle int32
+
+const (
+ // Don't use. Unspecified.
+ Columns_Column_HORIZONTAL_SIZE_STYLE_UNSPECIFIED Columns_Column_HorizontalSizeStyle = 0
+ // Default value. Column fills the available space, up to 70% of the
+ // card's width. If both columns are set to `FILL_AVAILABLE_SPACE`, each
+ // column fills 50% of the space.
+ Columns_Column_FILL_AVAILABLE_SPACE Columns_Column_HorizontalSizeStyle = 1
+ // Column fills the least amount of space possible and no more than 30% of
+ // the card's width.
+ Columns_Column_FILL_MINIMUM_SPACE Columns_Column_HorizontalSizeStyle = 2
+)
+
+// Enum value maps for Columns_Column_HorizontalSizeStyle.
+var (
+ Columns_Column_HorizontalSizeStyle_name = map[int32]string{
+ 0: "HORIZONTAL_SIZE_STYLE_UNSPECIFIED",
+ 1: "FILL_AVAILABLE_SPACE",
+ 2: "FILL_MINIMUM_SPACE",
+ }
+ Columns_Column_HorizontalSizeStyle_value = map[string]int32{
+ "HORIZONTAL_SIZE_STYLE_UNSPECIFIED": 0,
+ "FILL_AVAILABLE_SPACE": 1,
+ "FILL_MINIMUM_SPACE": 2,
+ }
+)
+
+func (x Columns_Column_HorizontalSizeStyle) Enum() *Columns_Column_HorizontalSizeStyle {
+ p := new(Columns_Column_HorizontalSizeStyle)
+ *p = x
+ return p
+}
+
+func (x Columns_Column_HorizontalSizeStyle) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Columns_Column_HorizontalSizeStyle) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[12].Descriptor()
+}
+
+func (Columns_Column_HorizontalSizeStyle) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[12]
+}
+
+func (x Columns_Column_HorizontalSizeStyle) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Columns_Column_HorizontalSizeStyle.Descriptor instead.
+func (Columns_Column_HorizontalSizeStyle) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18, 0, 0}
+}
+
+// Specifies whether widgets align to the top, bottom, or center of a
+// column.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+// Columns for Google Workspace Add-ons are in
+// Developer Preview.
+type Columns_Column_VerticalAlignment int32
+
+const (
+ // Don't use. Unspecified.
+ Columns_Column_VERTICAL_ALIGNMENT_UNSPECIFIED Columns_Column_VerticalAlignment = 0
+ // Default value. Aligns widgets to the center of a column.
+ Columns_Column_CENTER Columns_Column_VerticalAlignment = 1
+ // Aligns widgets to the top of a column.
+ Columns_Column_TOP Columns_Column_VerticalAlignment = 2
+ // Aligns widgets to the bottom of a column.
+ Columns_Column_BOTTOM Columns_Column_VerticalAlignment = 3
+)
+
+// Enum value maps for Columns_Column_VerticalAlignment.
+var (
+ Columns_Column_VerticalAlignment_name = map[int32]string{
+ 0: "VERTICAL_ALIGNMENT_UNSPECIFIED",
+ 1: "CENTER",
+ 2: "TOP",
+ 3: "BOTTOM",
+ }
+ Columns_Column_VerticalAlignment_value = map[string]int32{
+ "VERTICAL_ALIGNMENT_UNSPECIFIED": 0,
+ "CENTER": 1,
+ "TOP": 2,
+ "BOTTOM": 3,
+ }
+)
+
+func (x Columns_Column_VerticalAlignment) Enum() *Columns_Column_VerticalAlignment {
+ p := new(Columns_Column_VerticalAlignment)
+ *p = x
+ return p
+}
+
+func (x Columns_Column_VerticalAlignment) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Columns_Column_VerticalAlignment) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[13].Descriptor()
+}
+
+func (Columns_Column_VerticalAlignment) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[13]
+}
+
+func (x Columns_Column_VerticalAlignment) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Columns_Column_VerticalAlignment.Descriptor instead.
+func (Columns_Column_VerticalAlignment) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18, 0, 1}
+}
+
+// When an `OnClick` action opens a link, then the client can either open it
+// as a full-size window (if that's the frame used by the client), or an
+// overlay (such as a pop-up). The implementation depends on the client
+// platform capabilities, and the value selected might be ignored if the
+// client doesn't support it. `FULL_SIZE` is supported by all clients.
+//
+// [Google Workspace
+// Add-ons](https://developers.google.com/workspace/add-ons):
+type OpenLink_OpenAs int32
+
+const (
+ // The link opens as a full-size window (if that's the frame used by the
+ // client).
+ OpenLink_FULL_SIZE OpenLink_OpenAs = 0
+ // The link opens as an overlay, such as a pop-up.
+ OpenLink_OVERLAY OpenLink_OpenAs = 1
+)
+
+// Enum value maps for OpenLink_OpenAs.
+var (
+ OpenLink_OpenAs_name = map[int32]string{
+ 0: "FULL_SIZE",
+ 1: "OVERLAY",
+ }
+ OpenLink_OpenAs_value = map[string]int32{
+ "FULL_SIZE": 0,
+ "OVERLAY": 1,
+ }
+)
+
+func (x OpenLink_OpenAs) Enum() *OpenLink_OpenAs {
+ p := new(OpenLink_OpenAs)
+ *p = x
+ return p
+}
+
+func (x OpenLink_OpenAs) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (OpenLink_OpenAs) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[14].Descriptor()
+}
+
+func (OpenLink_OpenAs) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[14]
+}
+
+func (x OpenLink_OpenAs) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use OpenLink_OpenAs.Descriptor instead.
+func (OpenLink_OpenAs) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{20, 0}
+}
+
+// What the client does when a link opened by an `OnClick` action is closed.
+//
+// Implementation depends on client platform capabilities. For example, a web
+// browser might open a link in a pop-up window with an `OnClose` handler.
+//
+// If both `OnOpen` and `OnClose` handlers are set, and the client platform
+// can't support both values, `OnClose` takes precedence.
+//
+// [Google Workspace
+// Add-ons](https://developers.google.com/workspace/add-ons):
+type OpenLink_OnClose int32
+
+const (
+ // Default value. The card doesn't reload; nothing happens.
+ OpenLink_NOTHING OpenLink_OnClose = 0
+ // Reloads the card after the child window closes.
+ //
+ // If used in conjunction with
+ // [`OpenAs.OVERLAY`](https://developers.google.com/workspace/add-ons/reference/rpc/google.apps.card.v1#openas),
+ // the child window acts as a modal dialog and the parent card is blocked
+ // until the child window closes.
+ OpenLink_RELOAD OpenLink_OnClose = 1
+)
+
+// Enum value maps for OpenLink_OnClose.
+var (
+ OpenLink_OnClose_name = map[int32]string{
+ 0: "NOTHING",
+ 1: "RELOAD",
+ }
+ OpenLink_OnClose_value = map[string]int32{
+ "NOTHING": 0,
+ "RELOAD": 1,
+ }
+)
+
+func (x OpenLink_OnClose) Enum() *OpenLink_OnClose {
+ p := new(OpenLink_OnClose)
+ *p = x
+ return p
+}
+
+func (x OpenLink_OnClose) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (OpenLink_OnClose) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[15].Descriptor()
+}
+
+func (OpenLink_OnClose) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[15]
+}
+
+func (x OpenLink_OnClose) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use OpenLink_OnClose.Descriptor instead.
+func (OpenLink_OnClose) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{20, 1}
+}
+
+// Specifies the loading indicator that the action displays while
+// making the call to the action.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Action_LoadIndicator int32
+
+const (
+ // Displays a spinner to indicate that content is loading.
+ Action_SPINNER Action_LoadIndicator = 0
+ // Nothing is displayed.
+ Action_NONE Action_LoadIndicator = 1
+)
+
+// Enum value maps for Action_LoadIndicator.
+var (
+ Action_LoadIndicator_name = map[int32]string{
+ 0: "SPINNER",
+ 1: "NONE",
+ }
+ Action_LoadIndicator_value = map[string]int32{
+ "SPINNER": 0,
+ "NONE": 1,
+ }
+)
+
+func (x Action_LoadIndicator) Enum() *Action_LoadIndicator {
+ p := new(Action_LoadIndicator)
+ *p = x
+ return p
+}
+
+func (x Action_LoadIndicator) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Action_LoadIndicator) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[16].Descriptor()
+}
+
+func (Action_LoadIndicator) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[16]
+}
+
+func (x Action_LoadIndicator) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Action_LoadIndicator.Descriptor instead.
+func (Action_LoadIndicator) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{21, 0}
+}
+
+// Optional. Required when opening a
+// [dialog](https://developers.google.com/workspace/chat/dialogs).
+//
+// What to do in response to an interaction with a user, such as a user
+// clicking a button in a card message.
+//
+// If unspecified, the app responds by executing an `action`—like opening a
+// link or running a function—as normal.
+//
+// By specifying an `interaction`, the app can respond in special interactive
+// ways. For example, by setting `interaction` to `OPEN_DIALOG`, the app can
+// open a [dialog](https://developers.google.com/workspace/chat/dialogs).
+//
+// When specified, a loading indicator isn't shown. If specified for
+// an add-on, the entire card is stripped and nothing is shown in the client.
+//
+// [Google Chat apps](https://developers.google.com/workspace/chat):
+type Action_Interaction int32
+
+const (
+ // Default value. The `action` executes as normal.
+ Action_INTERACTION_UNSPECIFIED Action_Interaction = 0
+ // Opens a [dialog](https://developers.google.com/workspace/chat/dialogs), a
+ // windowed, card-based interface that Chat apps use to interact with users.
+ //
+ // Only supported by Chat apps in response to button-clicks on card
+ // messages. If specified for
+ // an add-on, the entire card is stripped and nothing is shown in the
+ // client.
+ //
+ // [Google Chat apps](https://developers.google.com/workspace/chat):
+ Action_OPEN_DIALOG Action_Interaction = 1
+)
+
+// Enum value maps for Action_Interaction.
+var (
+ Action_Interaction_name = map[int32]string{
+ 0: "INTERACTION_UNSPECIFIED",
+ 1: "OPEN_DIALOG",
+ }
+ Action_Interaction_value = map[string]int32{
+ "INTERACTION_UNSPECIFIED": 0,
+ "OPEN_DIALOG": 1,
+ }
+)
+
+func (x Action_Interaction) Enum() *Action_Interaction {
+ p := new(Action_Interaction)
+ *p = x
+ return p
+}
+
+func (x Action_Interaction) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Action_Interaction) Descriptor() protoreflect.EnumDescriptor {
+ return file_google_apps_card_v1_card_proto_enumTypes[17].Descriptor()
+}
+
+func (Action_Interaction) Type() protoreflect.EnumType {
+ return &file_google_apps_card_v1_card_proto_enumTypes[17]
+}
+
+func (x Action_Interaction) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Action_Interaction.Descriptor instead.
+func (Action_Interaction) EnumDescriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{21, 1}
+}
+
+// A card interface displayed in a Google Chat message or Google Workspace
+// Add-on.
+//
+// Cards support a defined layout, interactive UI elements like buttons, and
+// rich media like images. Use cards to present detailed information,
+// gather information from users, and guide users to take a next step.
+//
+// [Card builder](https://addons.gsuite.google.com/uikit/builder)
+//
+// To learn how
+// to build cards, see the following documentation:
+//
+// - For Google Chat apps, see [Design the components of a card or
+// dialog](https://developers.google.com/workspace/chat/design-components-card-dialog).
+// - For Google Workspace Add-ons, see [Card-based
+//
+// interfaces](https://developers.google.com/apps-script/add-ons/concepts/cards).
+//
+// **Example: Card message for a Google Chat app**
+//
+// ![Example contact
+// card](https://developers.google.com/workspace/chat/images/card_api_reference.png)
+//
+// To create the sample card message in Google Chat, use the following JSON:
+//
+// ```
+//
+// {
+// "cardsV2": [
+// {
+// "cardId": "unique-card-id",
+// "card": {
+// "header": {
+// "title": "Sasha",
+// "subtitle": "Software Engineer",
+// "imageUrl":
+// "https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png",
+// "imageType": "CIRCLE",
+// "imageAltText": "Avatar for Sasha"
+// },
+// "sections": [
+// {
+// "header": "Contact Info",
+// "collapsible": true,
+// "uncollapsibleWidgetsCount": 1,
+// "widgets": [
+// {
+// "decoratedText": {
+// "startIcon": {
+// "knownIcon": "EMAIL"
+// },
+// "text": "sasha@example.com"
+// }
+// },
+// {
+// "decoratedText": {
+// "startIcon": {
+// "knownIcon": "PERSON"
+// },
+// "text": "<font color=\"#80e27e\">Online</font>"
+// }
+// },
+// {
+// "decoratedText": {
+// "startIcon": {
+// "knownIcon": "PHONE"
+// },
+// "text": "+1 (555) 555-1234"
+// }
+// },
+// {
+// "buttonList": {
+// "buttons": [
+// {
+// "text": "Share",
+// "onClick": {
+// "openLink": {
+// "url": "https://example.com/share"
+// }
+// }
+// },
+// {
+// "text": "Edit",
+// "onClick": {
+// "action": {
+// "function": "goToView",
+// "parameters": [
+// {
+// "key": "viewType",
+// "value": "EDIT"
+// }
+// ]
+// }
+// }
+// }
+// ]
+// }
+// }
+// ]
+// }
+// ]
+// }
+// }
+// ]
+// }
+//
+// ```
+type Card struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The header of the card. A header usually contains a leading image and a
+ // title. Headers always appear at the top of a card.
+ Header *Card_CardHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
+ // Contains a collection of widgets. Each section has its own, optional
+ // header. Sections are visually separated by a line divider. For an example
+ // in Google Chat apps, see [Define a section of a
+ // card](https://developers.google.com/workspace/chat/design-components-card-dialog#define_a_section_of_a_card).
+ Sections []*Card_Section `protobuf:"bytes,2,rep,name=sections,proto3" json:"sections,omitempty"`
+ // The divider style between sections.
+ SectionDividerStyle Card_DividerStyle `protobuf:"varint,9,opt,name=section_divider_style,json=sectionDividerStyle,proto3,enum=google.apps.card.v1.Card_DividerStyle" json:"section_divider_style,omitempty"`
+ // The card's actions. Actions are added to the card's toolbar menu.
+ //
+ // [Google Workspace
+ // Add-ons](https://developers.google.com/workspace/add-ons):
+ //
+ // For example, the following JSON constructs a card action menu with
+ // `Settings` and `Send Feedback` options:
+ //
+ // ```
+ // "card_actions": [
+ //
+ // {
+ // "actionLabel": "Settings",
+ // "onClick": {
+ // "action": {
+ // "functionName": "goToView",
+ // "parameters": [
+ // {
+ // "key": "viewType",
+ // "value": "SETTING"
+ // }
+ // ],
+ // "loadIndicator": "LoadIndicator.SPINNER"
+ // }
+ // }
+ // },
+ // {
+ // "actionLabel": "Send Feedback",
+ // "onClick": {
+ // "openLink": {
+ // "url": "https://example.com/feedback"
+ // }
+ // }
+ // }
+ //
+ // ]
+ // ```
+ CardActions []*Card_CardAction `protobuf:"bytes,3,rep,name=card_actions,json=cardActions,proto3" json:"card_actions,omitempty"`
+ // Name of the card. Used as a card identifier in card navigation.
+ //
+ // [Google Workspace
+ // Add-ons](https://developers.google.com/workspace/add-ons):
+ Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+ // The fixed footer shown at the bottom of this card.
+ //
+ // Setting `fixedFooter` without specifying a `primaryButton` or a
+ // `secondaryButton` causes an error. For Chat apps, you can use fixed footers
+ // in
+ // [dialogs](https://developers.google.com/workspace/chat/dialogs), but not
+ // [card
+ // messages](https://developers.google.com/workspace/chat/create-messages#create).
+ //
+ // [Google Workspace Add-ons and Chat
+ // apps](https://developers.google.com/workspace/extend):
+ FixedFooter *Card_CardFixedFooter `protobuf:"bytes,5,opt,name=fixed_footer,json=fixedFooter,proto3" json:"fixed_footer,omitempty"`
+ // In Google Workspace Add-ons, sets the display properties of the
+ // `peekCardHeader`.
+ //
+ // [Google Workspace
+ // Add-ons](https://developers.google.com/workspace/add-ons):
+ DisplayStyle Card_DisplayStyle `protobuf:"varint,6,opt,name=display_style,json=displayStyle,proto3,enum=google.apps.card.v1.Card_DisplayStyle" json:"display_style,omitempty"`
+ // When displaying contextual content, the peek card header acts as a
+ // placeholder so that the user can navigate forward between the homepage
+ // cards and the contextual cards.
+ //
+ // [Google Workspace
+ // Add-ons](https://developers.google.com/workspace/add-ons):
+ PeekCardHeader *Card_CardHeader `protobuf:"bytes,7,opt,name=peek_card_header,json=peekCardHeader,proto3" json:"peek_card_header,omitempty"`
+}
+
+func (x *Card) Reset() {
+ *x = Card{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Card) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Card) ProtoMessage() {}
+
+func (x *Card) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Card.ProtoReflect.Descriptor instead.
+func (*Card) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Card) GetHeader() *Card_CardHeader {
+ if x != nil {
+ return x.Header
+ }
+ return nil
+}
+
+func (x *Card) GetSections() []*Card_Section {
+ if x != nil {
+ return x.Sections
+ }
+ return nil
+}
+
+func (x *Card) GetSectionDividerStyle() Card_DividerStyle {
+ if x != nil {
+ return x.SectionDividerStyle
+ }
+ return Card_DIVIDER_STYLE_UNSPECIFIED
+}
+
+func (x *Card) GetCardActions() []*Card_CardAction {
+ if x != nil {
+ return x.CardActions
+ }
+ return nil
+}
+
+func (x *Card) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *Card) GetFixedFooter() *Card_CardFixedFooter {
+ if x != nil {
+ return x.FixedFooter
+ }
+ return nil
+}
+
+func (x *Card) GetDisplayStyle() Card_DisplayStyle {
+ if x != nil {
+ return x.DisplayStyle
+ }
+ return Card_DISPLAY_STYLE_UNSPECIFIED
+}
+
+func (x *Card) GetPeekCardHeader() *Card_CardHeader {
+ if x != nil {
+ return x.PeekCardHeader
+ }
+ return nil
+}
+
+// Each card is made up of widgets.
+//
+// A widget is a composite object that can represent one of text, images,
+// buttons, and other object types.
+type Widget struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // A widget can only have one of the following items. You can use multiple
+ // widget fields to display more items.
+ //
+ // Types that are assignable to Data:
+ //
+ // *Widget_TextParagraph
+ // *Widget_Image
+ // *Widget_DecoratedText
+ // *Widget_ButtonList
+ // *Widget_TextInput
+ // *Widget_SelectionInput
+ // *Widget_DateTimePicker
+ // *Widget_Divider
+ // *Widget_Grid
+ // *Widget_Columns
+ Data isWidget_Data `protobuf_oneof:"data"`
+ // Specifies whether widgets align to the left, right, or center of a column.
+ HorizontalAlignment Widget_HorizontalAlignment `protobuf:"varint,8,opt,name=horizontal_alignment,json=horizontalAlignment,proto3,enum=google.apps.card.v1.Widget_HorizontalAlignment" json:"horizontal_alignment,omitempty"`
+}
+
+func (x *Widget) Reset() {
+ *x = Widget{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Widget) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Widget) ProtoMessage() {}
+
+func (x *Widget) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Widget.ProtoReflect.Descriptor instead.
+func (*Widget) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{1}
+}
+
+func (m *Widget) GetData() isWidget_Data {
+ if m != nil {
+ return m.Data
+ }
+ return nil
+}
+
+func (x *Widget) GetTextParagraph() *TextParagraph {
+ if x, ok := x.GetData().(*Widget_TextParagraph); ok {
+ return x.TextParagraph
+ }
+ return nil
+}
+
+func (x *Widget) GetImage() *Image {
+ if x, ok := x.GetData().(*Widget_Image); ok {
+ return x.Image
+ }
+ return nil
+}
+
+func (x *Widget) GetDecoratedText() *DecoratedText {
+ if x, ok := x.GetData().(*Widget_DecoratedText); ok {
+ return x.DecoratedText
+ }
+ return nil
+}
+
+func (x *Widget) GetButtonList() *ButtonList {
+ if x, ok := x.GetData().(*Widget_ButtonList); ok {
+ return x.ButtonList
+ }
+ return nil
+}
+
+func (x *Widget) GetTextInput() *TextInput {
+ if x, ok := x.GetData().(*Widget_TextInput); ok {
+ return x.TextInput
+ }
+ return nil
+}
+
+func (x *Widget) GetSelectionInput() *SelectionInput {
+ if x, ok := x.GetData().(*Widget_SelectionInput); ok {
+ return x.SelectionInput
+ }
+ return nil
+}
+
+func (x *Widget) GetDateTimePicker() *DateTimePicker {
+ if x, ok := x.GetData().(*Widget_DateTimePicker); ok {
+ return x.DateTimePicker
+ }
+ return nil
+}
+
+func (x *Widget) GetDivider() *Divider {
+ if x, ok := x.GetData().(*Widget_Divider); ok {
+ return x.Divider
+ }
+ return nil
+}
+
+func (x *Widget) GetGrid() *Grid {
+ if x, ok := x.GetData().(*Widget_Grid); ok {
+ return x.Grid
+ }
+ return nil
+}
+
+func (x *Widget) GetColumns() *Columns {
+ if x, ok := x.GetData().(*Widget_Columns); ok {
+ return x.Columns
+ }
+ return nil
+}
+
+func (x *Widget) GetHorizontalAlignment() Widget_HorizontalAlignment {
+ if x != nil {
+ return x.HorizontalAlignment
+ }
+ return Widget_HORIZONTAL_ALIGNMENT_UNSPECIFIED
+}
+
+type isWidget_Data interface {
+ isWidget_Data()
+}
+
+type Widget_TextParagraph struct {
+ // Displays a text paragraph. Supports simple HTML formatted text. For more
+ // information about formatting text, see
+ // [Formatting text in Google Chat
+ // apps](https://developers.google.com/workspace/chat/format-messages#card-formatting)
+ // and
+ // [Formatting
+ // text in Google Workspace
+ // Add-ons](https://developers.google.com/apps-script/add-ons/concepts/widgets#text_formatting).
+ //
+ // For example, the following JSON creates a bolded text:
+ // ```
+ //
+ // "textParagraph": {
+ // "text": " <b>bold text</b>"
+ // }
+ //
+ // ```
+ TextParagraph *TextParagraph `protobuf:"bytes,1,opt,name=text_paragraph,json=textParagraph,proto3,oneof"`
+}
+
+type Widget_Image struct {
+ // Displays an image.
+ //
+ // For example, the following JSON creates an image with alternative text:
+ // ```
+ //
+ // "image": {
+ // "imageUrl":
+ // "https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png",
+ // "altText": "Chat app avatar"
+ // }
+ //
+ // ```
+ Image *Image `protobuf:"bytes,2,opt,name=image,proto3,oneof"`
+}
+
+type Widget_DecoratedText struct {
+ // Displays a decorated text item.
+ //
+ // For example, the following JSON creates a decorated text widget showing
+ // email address:
+ //
+ // ```
+ //
+ // "decoratedText": {
+ // "icon": {
+ // "knownIcon": "EMAIL"
+ // },
+ // "topLabel": "Email Address",
+ // "text": "sasha@example.com",
+ // "bottomLabel": "This is a new Email address!",
+ // "switchControl": {
+ // "name": "has_send_welcome_email_to_sasha",
+ // "selected": false,
+ // "controlType": "CHECKBOX"
+ // }
+ // }
+ //
+ // ```
+ DecoratedText *DecoratedText `protobuf:"bytes,3,opt,name=decorated_text,json=decoratedText,proto3,oneof"`
+}
+
+type Widget_ButtonList struct {
+ // A list of buttons.
+ //
+ // For example, the following JSON creates two buttons. The first
+ // is a blue text button and the second is an image button that opens a
+ // link:
+ // ```
+ //
+ // "buttonList": {
+ // "buttons": [
+ // {
+ // "text": "Edit",
+ // "color": {
+ // "red": 0,
+ // "green": 0,
+ // "blue": 1,
+ // "alpha": 1
+ // },
+ // "disabled": true,
+ // },
+ // {
+ // "icon": {
+ // "knownIcon": "INVITE",
+ // "altText": "check calendar"
+ // },
+ // "onClick": {
+ // "openLink": {
+ // "url": "https://example.com/calendar"
+ // }
+ // }
+ // }
+ // ]
+ // }
+ //
+ // ```
+ ButtonList *ButtonList `protobuf:"bytes,4,opt,name=button_list,json=buttonList,proto3,oneof"`
+}
+
+type Widget_TextInput struct {
+ // Displays a text box that users can type into.
+ //
+ // For example, the following JSON creates a text input for an email
+ // address:
+ //
+ // ```
+ //
+ // "textInput": {
+ // "name": "mailing_address",
+ // "label": "Mailing Address"
+ // }
+ //
+ // ```
+ //
+ // As another example, the following JSON creates a text input for a
+ // programming language with static suggestions:
+ // ```
+ //
+ // "textInput": {
+ // "name": "preferred_programing_language",
+ // "label": "Preferred Language",
+ // "initialSuggestions": {
+ // "items": [
+ // {
+ // "text": "C++"
+ // },
+ // {
+ // "text": "Java"
+ // },
+ // {
+ // "text": "JavaScript"
+ // },
+ // {
+ // "text": "Python"
+ // }
+ // ]
+ // }
+ // }
+ //
+ // ```
+ TextInput *TextInput `protobuf:"bytes,5,opt,name=text_input,json=textInput,proto3,oneof"`
+}
+
+type Widget_SelectionInput struct {
+ // Displays a selection control that lets users select items. Selection
+ // controls can be checkboxes, radio buttons, switches, or dropdown menus.
+ //
+ // For example, the following JSON creates a dropdown menu that lets users
+ // choose a size:
+ //
+ // ```
+ //
+ // "selectionInput": {
+ // "name": "size",
+ // "label": "Size"
+ // "type": "DROPDOWN",
+ // "items": [
+ // {
+ // "text": "S",
+ // "value": "small",
+ // "selected": false
+ // },
+ // {
+ // "text": "M",
+ // "value": "medium",
+ // "selected": true
+ // },
+ // {
+ // "text": "L",
+ // "value": "large",
+ // "selected": false
+ // },
+ // {
+ // "text": "XL",
+ // "value": "extra_large",
+ // "selected": false
+ // }
+ // ]
+ // }
+ //
+ // ```
+ SelectionInput *SelectionInput `protobuf:"bytes,6,opt,name=selection_input,json=selectionInput,proto3,oneof"`
+}
+
+type Widget_DateTimePicker struct {
+ // Displays a widget that lets users input a date, time, or date and time.
+ //
+ // For example, the following JSON creates a date time picker to schedule an
+ // appointment:
+ //
+ // ```
+ //
+ // "dateTimePicker": {
+ // "name": "appointment_time",
+ // "label": "Book your appointment at:",
+ // "type": "DATE_AND_TIME",
+ // "valueMsEpoch": "796435200000"
+ // }
+ //
+ // ```
+ DateTimePicker *DateTimePicker `protobuf:"bytes,7,opt,name=date_time_picker,json=dateTimePicker,proto3,oneof"`
+}
+
+type Widget_Divider struct {
+ // Displays a horizontal line divider between widgets.
+ //
+ // For example, the following JSON creates a divider:
+ // ```
+ // "divider": {
+ // }
+ // ```
+ Divider *Divider `protobuf:"bytes,9,opt,name=divider,proto3,oneof"`
+}
+
+type Widget_Grid struct {
+ // Displays a grid with a collection of items.
+ //
+ // A grid supports any number of columns and items. The number of rows is
+ // determined by the upper bounds of the number items divided by the number
+ // of columns. A grid with 10 items and 2 columns has 5 rows. A grid with 11
+ // items and 2 columns has 6 rows.
+ //
+ // [Google Workspace Add-ons and
+ // Chat apps](https://developers.google.com/workspace/extend):
+ //
+ // For example, the following JSON creates a 2 column grid with a single
+ // item:
+ //
+ // ```
+ //
+ // "grid": {
+ // "title": "A fine collection of items",
+ // "columnCount": 2,
+ // "borderStyle": {
+ // "type": "STROKE",
+ // "cornerRadius": 4
+ // },
+ // "items": [
+ // {
+ // "image": {
+ // "imageUri": "https://www.example.com/image.png",
+ // "cropStyle": {
+ // "type": "SQUARE"
+ // },
+ // "borderStyle": {
+ // "type": "STROKE"
+ // }
+ // },
+ // "title": "An item",
+ // "textAlignment": "CENTER"
+ // }
+ // ],
+ // "onClick": {
+ // "openLink": {
+ // "url": "https://www.example.com"
+ // }
+ // }
+ // }
+ //
+ // ```
+ Grid *Grid `protobuf:"bytes,10,opt,name=grid,proto3,oneof"`
+}
+
+type Widget_Columns struct {
+ // Displays up to 2 columns.
+ //
+ // To include more than 2 columns, or to use rows, use the `Grid` widget.
+ //
+ // For example, the following JSON creates 2 columns that each contain
+ // text paragraphs:
+ //
+ // ```
+ //
+ // "columns": {
+ // "columnItems": [
+ // {
+ // "horizontalSizeStyle": "FILL_AVAILABLE_SPACE",
+ // "horizontalAlignment": "CENTER",
+ // "verticalAlignment": "CENTER",
+ // "widgets": [
+ // {
+ // "textParagraph": {
+ // "text": "First column text paragraph"
+ // }
+ // }
+ // ]
+ // },
+ // {
+ // "horizontalSizeStyle": "FILL_AVAILABLE_SPACE",
+ // "horizontalAlignment": "CENTER",
+ // "verticalAlignment": "CENTER",
+ // "widgets": [
+ // {
+ // "textParagraph": {
+ // "text": "Second column text paragraph"
+ // }
+ // }
+ // ]
+ // }
+ // ]
+ // }
+ //
+ // ```
+ Columns *Columns `protobuf:"bytes,11,opt,name=columns,proto3,oneof"`
+}
+
+func (*Widget_TextParagraph) isWidget_Data() {}
+
+func (*Widget_Image) isWidget_Data() {}
+
+func (*Widget_DecoratedText) isWidget_Data() {}
+
+func (*Widget_ButtonList) isWidget_Data() {}
+
+func (*Widget_TextInput) isWidget_Data() {}
+
+func (*Widget_SelectionInput) isWidget_Data() {}
+
+func (*Widget_DateTimePicker) isWidget_Data() {}
+
+func (*Widget_Divider) isWidget_Data() {}
+
+func (*Widget_Grid) isWidget_Data() {}
+
+func (*Widget_Columns) isWidget_Data() {}
+
+// A paragraph of text that supports formatting. For an example in
+// Google Chat apps, see [Add a paragraph of formatted
+// text](https://developers.google.com/workspace/chat/add-text-image-card-dialog#add_a_paragraph_of_formatted_text).
+// For more information
+// about formatting text, see
+// [Formatting text in Google Chat
+// apps](https://developers.google.com/workspace/chat/format-messages#card-formatting)
+// and
+// [Formatting
+// text in Google Workspace
+// Add-ons](https://developers.google.com/apps-script/add-ons/concepts/widgets#text_formatting).
+//
+// [Google Workspace Add-ons and
+// Chat apps](https://developers.google.com/workspace/extend):
+type TextParagraph struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The text that's shown in the widget.
+ Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+}
+
+func (x *TextParagraph) Reset() {
+ *x = TextParagraph{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *TextParagraph) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TextParagraph) ProtoMessage() {}
+
+func (x *TextParagraph) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use TextParagraph.ProtoReflect.Descriptor instead.
+func (*TextParagraph) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *TextParagraph) GetText() string {
+ if x != nil {
+ return x.Text
+ }
+ return ""
+}
+
+// An image that is specified by a URL and can have an `onClick` action. For an
+// example, see [Add an
+// image](https://developers.google.com/workspace/chat/add-text-image-card-dialog#add_an_image).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Image struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The HTTPS URL that hosts the image.
+ //
+ // For example:
+ //
+ // ```
+ // https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png
+ // ```
+ ImageUrl string `protobuf:"bytes,1,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"`
+ // When a user clicks the image, the click triggers this action.
+ OnClick *OnClick `protobuf:"bytes,2,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"`
+ // The alternative text of this image that's used for accessibility.
+ AltText string `protobuf:"bytes,3,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"`
+}
+
+func (x *Image) Reset() {
+ *x = Image{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Image) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Image) ProtoMessage() {}
+
+func (x *Image) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Image.ProtoReflect.Descriptor instead.
+func (*Image) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *Image) GetImageUrl() string {
+ if x != nil {
+ return x.ImageUrl
+ }
+ return ""
+}
+
+func (x *Image) GetOnClick() *OnClick {
+ if x != nil {
+ return x.OnClick
+ }
+ return nil
+}
+
+func (x *Image) GetAltText() string {
+ if x != nil {
+ return x.AltText
+ }
+ return ""
+}
+
+// Displays a divider between widgets as a horizontal line. For an example in
+// Google Chat apps, see
+// [Add a horizontal divider between
+// widgets](https://developers.google.com/workspace/chat/format-structure-card-dialog#add_a_horizontal_divider_between_widgets).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+//
+// For example, the following JSON creates a divider:
+//
+// ```
+// "divider": {}
+// ```
+type Divider struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *Divider) Reset() {
+ *x = Divider{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Divider) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Divider) ProtoMessage() {}
+
+func (x *Divider) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[4]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Divider.ProtoReflect.Descriptor instead.
+func (*Divider) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{4}
+}
+
+// A widget that displays text with optional decorations such as a label above
+// or below the text, an icon in front of the text, a selection widget, or a
+// button after the text. For an example in
+// Google Chat apps, see [Display text with decorative
+// text](https://developers.google.com/workspace/chat/add-text-image-card-dialog#display_text_with_decorative_elements).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type DecoratedText struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Deprecated in favor of `startIcon`.
+ //
+ // Deprecated: Do not use.
+ Icon *Icon `protobuf:"bytes,1,opt,name=icon,proto3" json:"icon,omitempty"`
+ // The icon displayed in front of the text.
+ StartIcon *Icon `protobuf:"bytes,12,opt,name=start_icon,json=startIcon,proto3" json:"start_icon,omitempty"`
+ // The text that appears above `text`. Always truncates.
+ TopLabel string `protobuf:"bytes,3,opt,name=top_label,json=topLabel,proto3" json:"top_label,omitempty"`
+ // Required. The primary text.
+ //
+ // Supports simple formatting. For more information
+ // about formatting text, see
+ // [Formatting text in Google Chat
+ // apps](https://developers.google.com/workspace/chat/format-messages#card-formatting)
+ // and
+ // [Formatting
+ // text in Google Workspace
+ // Add-ons](https://developers.google.com/apps-script/add-ons/concepts/widgets#text_formatting).
+ Text string `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"`
+ // The wrap text setting. If `true`, the text wraps and displays on
+ // multiple lines. Otherwise, the text is truncated.
+ //
+ // Only applies to `text`, not `topLabel` and `bottomLabel`.
+ WrapText bool `protobuf:"varint,5,opt,name=wrap_text,json=wrapText,proto3" json:"wrap_text,omitempty"`
+ // The text that appears below `text`. Always wraps.
+ BottomLabel string `protobuf:"bytes,6,opt,name=bottom_label,json=bottomLabel,proto3" json:"bottom_label,omitempty"`
+ // This action is triggered when users click `topLabel` or `bottomLabel`.
+ OnClick *OnClick `protobuf:"bytes,7,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"`
+ // A button, switch, checkbox, or image that appears to the right-hand side
+ // of text in the `decoratedText` widget.
+ //
+ // Types that are assignable to Control:
+ //
+ // *DecoratedText_Button
+ // *DecoratedText_SwitchControl_
+ // *DecoratedText_EndIcon
+ Control isDecoratedText_Control `protobuf_oneof:"control"`
+}
+
+func (x *DecoratedText) Reset() {
+ *x = DecoratedText{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DecoratedText) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DecoratedText) ProtoMessage() {}
+
+func (x *DecoratedText) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[5]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DecoratedText.ProtoReflect.Descriptor instead.
+func (*DecoratedText) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{5}
+}
+
+// Deprecated: Do not use.
+func (x *DecoratedText) GetIcon() *Icon {
+ if x != nil {
+ return x.Icon
+ }
+ return nil
+}
+
+func (x *DecoratedText) GetStartIcon() *Icon {
+ if x != nil {
+ return x.StartIcon
+ }
+ return nil
+}
+
+func (x *DecoratedText) GetTopLabel() string {
+ if x != nil {
+ return x.TopLabel
+ }
+ return ""
+}
+
+func (x *DecoratedText) GetText() string {
+ if x != nil {
+ return x.Text
+ }
+ return ""
+}
+
+func (x *DecoratedText) GetWrapText() bool {
+ if x != nil {
+ return x.WrapText
+ }
+ return false
+}
+
+func (x *DecoratedText) GetBottomLabel() string {
+ if x != nil {
+ return x.BottomLabel
+ }
+ return ""
+}
+
+func (x *DecoratedText) GetOnClick() *OnClick {
+ if x != nil {
+ return x.OnClick
+ }
+ return nil
+}
+
+func (m *DecoratedText) GetControl() isDecoratedText_Control {
+ if m != nil {
+ return m.Control
+ }
+ return nil
+}
+
+func (x *DecoratedText) GetButton() *Button {
+ if x, ok := x.GetControl().(*DecoratedText_Button); ok {
+ return x.Button
+ }
+ return nil
+}
+
+func (x *DecoratedText) GetSwitchControl() *DecoratedText_SwitchControl {
+ if x, ok := x.GetControl().(*DecoratedText_SwitchControl_); ok {
+ return x.SwitchControl
+ }
+ return nil
+}
+
+func (x *DecoratedText) GetEndIcon() *Icon {
+ if x, ok := x.GetControl().(*DecoratedText_EndIcon); ok {
+ return x.EndIcon
+ }
+ return nil
+}
+
+type isDecoratedText_Control interface {
+ isDecoratedText_Control()
+}
+
+type DecoratedText_Button struct {
+ // A button that a user can click to trigger an action.
+ Button *Button `protobuf:"bytes,8,opt,name=button,proto3,oneof"`
+}
+
+type DecoratedText_SwitchControl_ struct {
+ // A switch widget that a user can click to change its state and trigger an
+ // action.
+ SwitchControl *DecoratedText_SwitchControl `protobuf:"bytes,9,opt,name=switch_control,json=switchControl,proto3,oneof"`
+}
+
+type DecoratedText_EndIcon struct {
+ // An icon displayed after the text.
+ //
+ // Supports
+ // [built-in](https://developers.google.com/workspace/chat/format-messages#builtinicons)
+ // and
+ // [custom](https://developers.google.com/workspace/chat/format-messages#customicons)
+ // icons.
+ EndIcon *Icon `protobuf:"bytes,11,opt,name=end_icon,json=endIcon,proto3,oneof"`
+}
+
+func (*DecoratedText_Button) isDecoratedText_Control() {}
+
+func (*DecoratedText_SwitchControl_) isDecoratedText_Control() {}
+
+func (*DecoratedText_EndIcon) isDecoratedText_Control() {}
+
+// A field in which users can enter text. Supports suggestions and on-change
+// actions. For an example in Google Chat apps, see [Add a field in which a user
+// can enter
+// text](https://developers.google.com/workspace/chat/design-interactive-card-dialog#add_a_field_in_which_a_user_can_enter_text).
+//
+// Chat apps receive and can process the value of entered text during form input
+// events. For details about working with form inputs, see [Receive form
+// data](https://developers.google.com/workspace/chat/read-form-data).
+//
+// When you need to collect undefined or abstract data from users,
+// use a text input. To collect defined or enumerated data from users, use the
+// [SelectionInput][google.apps.card.v1.SelectionInput] widget.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type TextInput struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name by which the text input is identified in a form input event.
+ //
+ // For details about working with form inputs, see [Receive form
+ // data](https://developers.google.com/workspace/chat/read-form-data).
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // The text that appears above the text input field in the user interface.
+ //
+ // Specify text that helps the user enter the information your app needs.
+ // For example, if you are asking someone's name, but specifically need their
+ // surname, write `surname` instead of `name`.
+ //
+ // Required if `hintText` is unspecified. Otherwise, optional.
+ Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
+ // Text that appears below the text input field meant to assist users by
+ // prompting them to enter a certain value. This text is always visible.
+ //
+ // Required if `label` is unspecified. Otherwise, optional.
+ HintText string `protobuf:"bytes,3,opt,name=hint_text,json=hintText,proto3" json:"hint_text,omitempty"`
+ // The value entered by a user, returned as part of a form input event.
+ //
+ // For details about working with form inputs, see [Receive form
+ // data](https://developers.google.com/workspace/chat/read-form-data).
+ Value string `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"`
+ // How a text input field appears in the user interface.
+ // For example, whether the field is single or multi-line.
+ Type TextInput_Type `protobuf:"varint,5,opt,name=type,proto3,enum=google.apps.card.v1.TextInput_Type" json:"type,omitempty"`
+ // What to do when a change occurs in the text input field. For example, a
+ // user adding to the field or deleting text.
+ //
+ // Examples of actions to take include running a custom function or opening
+ // a [dialog](https://developers.google.com/workspace/chat/dialogs)
+ // in Google Chat.
+ OnChangeAction *Action `protobuf:"bytes,6,opt,name=on_change_action,json=onChangeAction,proto3" json:"on_change_action,omitempty"`
+ // Suggested values that users can enter. These values appear when users click
+ // inside the text input field. As users type, the suggested values
+ // dynamically filter to match what the users have typed.
+ //
+ // For example, a text input field for programming language might suggest
+ // Java, JavaScript, Python, and C++. When users start typing `Jav`, the list
+ // of suggestions filters to show just `Java` and `JavaScript`.
+ //
+ // Suggested values help guide users to enter values that your app can make
+ // sense of. When referring to JavaScript, some users might enter `javascript`
+ // and others `java script`. Suggesting `JavaScript` can standardize how users
+ // interact with your app.
+ //
+ // When specified, `TextInput.type` is always `SINGLE_LINE`, even if it's set
+ // to `MULTIPLE_LINE`.
+ //
+ // [Google Workspace
+ // Add-ons and Chat apps](https://developers.google.com/workspace/extend):
+ InitialSuggestions *Suggestions `protobuf:"bytes,7,opt,name=initial_suggestions,json=initialSuggestions,proto3" json:"initial_suggestions,omitempty"`
+ // Optional. Specify what action to take when the text input field provides
+ // suggestions to users who interact with it.
+ //
+ // If unspecified, the suggestions are set by `initialSuggestions` and
+ // are processed by the client.
+ //
+ // If specified, the app takes the action specified here, such as running
+ // a custom function.
+ //
+ // [Google Workspace
+ // Add-ons](https://developers.google.com/workspace/add-ons):
+ AutoCompleteAction *Action `protobuf:"bytes,8,opt,name=auto_complete_action,json=autoCompleteAction,proto3" json:"auto_complete_action,omitempty"`
+ // Text that appears in the text input field when the field is empty.
+ // Use this text to prompt users to enter a value. For example, `Enter a
+ // number from 0 to 100`.
+ //
+ // [Google Chat apps](https://developers.google.com/workspace/chat):
+ PlaceholderText string `protobuf:"bytes,12,opt,name=placeholder_text,json=placeholderText,proto3" json:"placeholder_text,omitempty"`
+}
+
+func (x *TextInput) Reset() {
+ *x = TextInput{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *TextInput) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TextInput) ProtoMessage() {}
+
+func (x *TextInput) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[6]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use TextInput.ProtoReflect.Descriptor instead.
+func (*TextInput) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *TextInput) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *TextInput) GetLabel() string {
+ if x != nil {
+ return x.Label
+ }
+ return ""
+}
+
+func (x *TextInput) GetHintText() string {
+ if x != nil {
+ return x.HintText
+ }
+ return ""
+}
+
+func (x *TextInput) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+
+func (x *TextInput) GetType() TextInput_Type {
+ if x != nil {
+ return x.Type
+ }
+ return TextInput_SINGLE_LINE
+}
+
+func (x *TextInput) GetOnChangeAction() *Action {
+ if x != nil {
+ return x.OnChangeAction
+ }
+ return nil
+}
+
+func (x *TextInput) GetInitialSuggestions() *Suggestions {
+ if x != nil {
+ return x.InitialSuggestions
+ }
+ return nil
+}
+
+func (x *TextInput) GetAutoCompleteAction() *Action {
+ if x != nil {
+ return x.AutoCompleteAction
+ }
+ return nil
+}
+
+func (x *TextInput) GetPlaceholderText() string {
+ if x != nil {
+ return x.PlaceholderText
+ }
+ return ""
+}
+
+// Suggested values that users can enter. These values appear when users click
+// inside the text input field. As users type, the suggested values
+// dynamically filter to match what the users have typed.
+//
+// For example, a text input field for programming language might suggest
+// Java, JavaScript, Python, and C++. When users start typing `Jav`, the list
+// of suggestions filters to show `Java` and `JavaScript`.
+//
+// Suggested values help guide users to enter values that your app can make
+// sense of. When referring to JavaScript, some users might enter `javascript`
+// and others `java script`. Suggesting `JavaScript` can standardize how users
+// interact with your app.
+//
+// When specified, `TextInput.type` is always `SINGLE_LINE`, even if it's set
+// to `MULTIPLE_LINE`.
+//
+// [Google Workspace
+// Add-ons and Chat apps](https://developers.google.com/workspace/extend):
+type Suggestions struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // A list of suggestions used for autocomplete recommendations in text input
+ // fields.
+ Items []*Suggestions_SuggestionItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+}
+
+func (x *Suggestions) Reset() {
+ *x = Suggestions{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Suggestions) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Suggestions) ProtoMessage() {}
+
+func (x *Suggestions) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[7]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Suggestions.ProtoReflect.Descriptor instead.
+func (*Suggestions) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *Suggestions) GetItems() []*Suggestions_SuggestionItem {
+ if x != nil {
+ return x.Items
+ }
+ return nil
+}
+
+// A list of buttons layed out horizontally. For an example in
+// Google Chat apps, see
+// [Add a
+// button](https://developers.google.com/workspace/chat/design-interactive-card-dialog#add_a_button).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type ButtonList struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // An array of buttons.
+ Buttons []*Button `protobuf:"bytes,1,rep,name=buttons,proto3" json:"buttons,omitempty"`
+}
+
+func (x *ButtonList) Reset() {
+ *x = ButtonList{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ButtonList) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ButtonList) ProtoMessage() {}
+
+func (x *ButtonList) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[8]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ButtonList.ProtoReflect.Descriptor instead.
+func (*ButtonList) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *ButtonList) GetButtons() []*Button {
+ if x != nil {
+ return x.Buttons
+ }
+ return nil
+}
+
+// A widget that creates one or more UI items that users can select.
+// For example, a dropdown menu or checkboxes. You can use this widget to
+// collect data that can be predicted or enumerated. For an example in Google
+// Chat apps, see [Add selectable UI
+// elements](/workspace/chat/design-interactive-card-dialog#add_selectable_ui_elements).
+//
+// Chat apps can process the value of items that users select or input. For
+// details about working with form inputs, see [Receive form
+// data](https://developers.google.com/workspace/chat/read-form-data).
+//
+// To collect undefined or abstract data from users, use
+// the [TextInput][google.apps.card.v1.TextInput] widget.
+//
+// [Google Workspace Add-ons
+// and Chat apps](https://developers.google.com/workspace/extend):
+type SelectionInput struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name that identifies the selection input in a form input event.
+ //
+ // For details about working with form inputs, see [Receive form
+ // data](https://developers.google.com/workspace/chat/read-form-data).
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // The text that appears above the selection input field in the user
+ // interface.
+ //
+ // Specify text that helps the user enter the information your app needs.
+ // For example, if users are selecting the urgency of a work ticket from a
+ // drop-down menu, the label might be "Urgency" or "Select urgency".
+ Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
+ // The type of items that are displayed to users in a `SelectionInput` widget.
+ // Selection types support different types of interactions. For example, users
+ // can select one or more checkboxes, but they can only select one value from
+ // a dropdown menu.
+ Type SelectionInput_SelectionType `protobuf:"varint,3,opt,name=type,proto3,enum=google.apps.card.v1.SelectionInput_SelectionType" json:"type,omitempty"`
+ // An array of selectable items. For example, an array of radio buttons or
+ // checkboxes. Supports up to 100 items.
+ Items []*SelectionInput_SelectionItem `protobuf:"bytes,4,rep,name=items,proto3" json:"items,omitempty"`
+ // If specified, the form is submitted when the selection changes. If not
+ // specified, you must specify a separate button that submits the form.
+ //
+ // For details about working with form inputs, see [Receive form
+ // data](https://developers.google.com/workspace/chat/read-form-data).
+ OnChangeAction *Action `protobuf:"bytes,5,opt,name=on_change_action,json=onChangeAction,proto3" json:"on_change_action,omitempty"`
+ // For multiselect menus, the maximum number of items that a user can select.
+ // Minimum value is 1 item. If unspecified, defaults to 3 items.
+ MultiSelectMaxSelectedItems int32 `protobuf:"varint,6,opt,name=multi_select_max_selected_items,json=multiSelectMaxSelectedItems,proto3" json:"multi_select_max_selected_items,omitempty"`
+ // For multiselect menus, the number of text characters that a user inputs
+ // before the app queries autocomplete and displays suggested items
+ // in the menu.
+ //
+ // If unspecified, defaults to 0 characters for static data sources and 3
+ // characters for external data sources.
+ MultiSelectMinQueryLength int32 `protobuf:"varint,7,opt,name=multi_select_min_query_length,json=multiSelectMinQueryLength,proto3" json:"multi_select_min_query_length,omitempty"`
+ // For a multiselect menu, the data source that populates
+ // selection items.
+ //
+ // [Google Chat apps](https://developers.google.com/workspace/chat):
+ //
+ // Types that are assignable to MultiSelectDataSource:
+ //
+ // *SelectionInput_ExternalDataSource
+ // *SelectionInput_PlatformDataSource_
+ MultiSelectDataSource isSelectionInput_MultiSelectDataSource `protobuf_oneof:"multi_select_data_source"`
+}
+
+func (x *SelectionInput) Reset() {
+ *x = SelectionInput{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SelectionInput) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SelectionInput) ProtoMessage() {}
+
+func (x *SelectionInput) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[9]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SelectionInput.ProtoReflect.Descriptor instead.
+func (*SelectionInput) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *SelectionInput) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *SelectionInput) GetLabel() string {
+ if x != nil {
+ return x.Label
+ }
+ return ""
+}
+
+func (x *SelectionInput) GetType() SelectionInput_SelectionType {
+ if x != nil {
+ return x.Type
+ }
+ return SelectionInput_CHECK_BOX
+}
+
+func (x *SelectionInput) GetItems() []*SelectionInput_SelectionItem {
+ if x != nil {
+ return x.Items
+ }
+ return nil
+}
+
+func (x *SelectionInput) GetOnChangeAction() *Action {
+ if x != nil {
+ return x.OnChangeAction
+ }
+ return nil
+}
+
+func (x *SelectionInput) GetMultiSelectMaxSelectedItems() int32 {
+ if x != nil {
+ return x.MultiSelectMaxSelectedItems
+ }
+ return 0
+}
+
+func (x *SelectionInput) GetMultiSelectMinQueryLength() int32 {
+ if x != nil {
+ return x.MultiSelectMinQueryLength
+ }
+ return 0
+}
+
+func (m *SelectionInput) GetMultiSelectDataSource() isSelectionInput_MultiSelectDataSource {
+ if m != nil {
+ return m.MultiSelectDataSource
+ }
+ return nil
+}
+
+func (x *SelectionInput) GetExternalDataSource() *Action {
+ if x, ok := x.GetMultiSelectDataSource().(*SelectionInput_ExternalDataSource); ok {
+ return x.ExternalDataSource
+ }
+ return nil
+}
+
+func (x *SelectionInput) GetPlatformDataSource() *SelectionInput_PlatformDataSource {
+ if x, ok := x.GetMultiSelectDataSource().(*SelectionInput_PlatformDataSource_); ok {
+ return x.PlatformDataSource
+ }
+ return nil
+}
+
+type isSelectionInput_MultiSelectDataSource interface {
+ isSelectionInput_MultiSelectDataSource()
+}
+
+type SelectionInput_ExternalDataSource struct {
+ // An external data source, such as a relational data base.
+ ExternalDataSource *Action `protobuf:"bytes,8,opt,name=external_data_source,json=externalDataSource,proto3,oneof"`
+}
+
+type SelectionInput_PlatformDataSource_ struct {
+ // A data source from Google Workspace.
+ PlatformDataSource *SelectionInput_PlatformDataSource `protobuf:"bytes,9,opt,name=platform_data_source,json=platformDataSource,proto3,oneof"`
+}
+
+func (*SelectionInput_ExternalDataSource) isSelectionInput_MultiSelectDataSource() {}
+
+func (*SelectionInput_PlatformDataSource_) isSelectionInput_MultiSelectDataSource() {}
+
+// Lets users input a date, a time, or both a date and a time. For an example in
+// Google Chat apps, see [Let a user pick a date and
+// time](https://developers.google.com/workspace/chat/design-interactive-card-dialog#let_a_user_pick_a_date_and_time).
+//
+// Users can input text or use the picker to select dates and times. If users
+// input an invalid date or time, the picker shows an error that prompts users
+// to input the information correctly.
+//
+// [Google Workspace
+// Add-ons and Chat apps](https://developers.google.com/workspace/extend):
+type DateTimePicker struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name by which the `DateTimePicker` is identified in a form input event.
+ //
+ // For details about working with form inputs, see [Receive form
+ // data](https://developers.google.com/workspace/chat/read-form-data).
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // The text that prompts users to input a date, a time, or a date and time.
+ // For example, if users are scheduling an appointment, use a label such as
+ // `Appointment date` or `Appointment date and time`.
+ Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
+ // Whether the widget supports inputting a date, a time, or the date and time.
+ Type DateTimePicker_DateTimePickerType `protobuf:"varint,3,opt,name=type,proto3,enum=google.apps.card.v1.DateTimePicker_DateTimePickerType" json:"type,omitempty"`
+ // The default value displayed in the widget, in milliseconds since [Unix
+ // epoch time](https://en.wikipedia.org/wiki/Unix_time).
+ //
+ // Specify the value based on the type of picker (`DateTimePickerType`):
+ //
+ // - `DATE_AND_TIME`: a calendar date and time in UTC. For example, to
+ // represent January 1, 2023 at 12:00 PM UTC, use `1672574400000`.
+ // - `DATE_ONLY`: a calendar date at 00:00:00 UTC. For example, to represent
+ // January 1, 2023, use `1672531200000`.
+ // - `TIME_ONLY`: a time in UTC. For example, to represent 12:00 PM, use
+ // `43200000` (or `12 * 60 * 60 * 1000`).
+ ValueMsEpoch int64 `protobuf:"varint,4,opt,name=value_ms_epoch,json=valueMsEpoch,proto3" json:"value_ms_epoch,omitempty"`
+ // The number representing the time zone offset from UTC, in minutes.
+ // If set, the `value_ms_epoch` is displayed in the specified time zone.
+ // If unset, the value defaults to the user's time zone setting.
+ TimezoneOffsetDate int32 `protobuf:"varint,5,opt,name=timezone_offset_date,json=timezoneOffsetDate,proto3" json:"timezone_offset_date,omitempty"`
+ // Triggered when the user clicks **Save** or **Clear** from the
+ // `DateTimePicker` interface.
+ OnChangeAction *Action `protobuf:"bytes,6,opt,name=on_change_action,json=onChangeAction,proto3" json:"on_change_action,omitempty"`
+}
+
+func (x *DateTimePicker) Reset() {
+ *x = DateTimePicker{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DateTimePicker) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DateTimePicker) ProtoMessage() {}
+
+func (x *DateTimePicker) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[10]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DateTimePicker.ProtoReflect.Descriptor instead.
+func (*DateTimePicker) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *DateTimePicker) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *DateTimePicker) GetLabel() string {
+ if x != nil {
+ return x.Label
+ }
+ return ""
+}
+
+func (x *DateTimePicker) GetType() DateTimePicker_DateTimePickerType {
+ if x != nil {
+ return x.Type
+ }
+ return DateTimePicker_DATE_AND_TIME
+}
+
+func (x *DateTimePicker) GetValueMsEpoch() int64 {
+ if x != nil {
+ return x.ValueMsEpoch
+ }
+ return 0
+}
+
+func (x *DateTimePicker) GetTimezoneOffsetDate() int32 {
+ if x != nil {
+ return x.TimezoneOffsetDate
+ }
+ return 0
+}
+
+func (x *DateTimePicker) GetOnChangeAction() *Action {
+ if x != nil {
+ return x.OnChangeAction
+ }
+ return nil
+}
+
+// A text, icon, or text and icon button that users can click. For an example in
+// Google Chat apps, see
+// [Add a
+// button](https://developers.google.com/workspace/chat/design-interactive-card-dialog#add_a_button).
+//
+// To make an image a clickable button, specify an
+// [`Image`][google.apps.card.v1.Image] (not an
+// [`ImageComponent`][google.apps.card.v1.ImageComponent]) and set an
+// `onClick` action.
+//
+// [Google Workspace
+// Add-ons and Chat apps](https://developers.google.com/workspace/extend):
+type Button struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The text displayed inside the button.
+ Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+ // The icon image. If both `icon` and `text` are set, then the icon appears
+ // before the text.
+ Icon *Icon `protobuf:"bytes,2,opt,name=icon,proto3" json:"icon,omitempty"`
+ // If set, the button is filled with a solid background color and the font
+ // color changes to maintain contrast with the background color. For example,
+ // setting a blue background likely results in white text.
+ //
+ // If unset, the image background is white and the font color is blue.
+ //
+ // For red, green, and blue, the value of each field is a `float` number that
+ // you can express in either of two ways: as a number between 0 and 255
+ // divided by 255 (153/255), or as a value between 0 and 1 (0.6). 0 represents
+ // the absence of a color and 1 or 255/255 represent the full presence of that
+ // color on the RGB scale.
+ //
+ // Optionally set `alpha`, which sets a level of transparency using this
+ // equation:
+ //
+ // ```
+ // pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+ // ```
+ //
+ // For `alpha`, a value of `1` corresponds with a solid color, and a value of
+ // `0` corresponds with a completely transparent color.
+ //
+ // For example, the following color represents a half transparent red:
+ //
+ // ```
+ //
+ // "color": {
+ // "red": 1,
+ // "green": 0,
+ // "blue": 0,
+ // "alpha": 0.5
+ // }
+ //
+ // ```
+ Color *color.Color `protobuf:"bytes,3,opt,name=color,proto3" json:"color,omitempty"`
+ // Required. The action to perform when a user clicks the button, such as
+ // opening a hyperlink or running a custom function.
+ OnClick *OnClick `protobuf:"bytes,4,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"`
+ // If `true`, the button is displayed in an inactive state and doesn't respond
+ // to user actions.
+ Disabled bool `protobuf:"varint,5,opt,name=disabled,proto3" json:"disabled,omitempty"`
+ // The alternative text that's used for accessibility.
+ //
+ // Set descriptive text that lets users know what the button does. For
+ // example, if a button opens a hyperlink, you might write: "Opens a new
+ // browser tab and navigates to the Google Chat developer documentation at
+ // https://developers.google.com/workspace/chat".
+ AltText string `protobuf:"bytes,6,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"`
+}
+
+func (x *Button) Reset() {
+ *x = Button{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Button) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Button) ProtoMessage() {}
+
+func (x *Button) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[11]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Button.ProtoReflect.Descriptor instead.
+func (*Button) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *Button) GetText() string {
+ if x != nil {
+ return x.Text
+ }
+ return ""
+}
+
+func (x *Button) GetIcon() *Icon {
+ if x != nil {
+ return x.Icon
+ }
+ return nil
+}
+
+func (x *Button) GetColor() *color.Color {
+ if x != nil {
+ return x.Color
+ }
+ return nil
+}
+
+func (x *Button) GetOnClick() *OnClick {
+ if x != nil {
+ return x.OnClick
+ }
+ return nil
+}
+
+func (x *Button) GetDisabled() bool {
+ if x != nil {
+ return x.Disabled
+ }
+ return false
+}
+
+func (x *Button) GetAltText() string {
+ if x != nil {
+ return x.AltText
+ }
+ return ""
+}
+
+// An icon displayed in a widget on a card. For an example in Google Chat apps,
+// see [Add an
+// icon](https://developers.google.com/workspace/chat/add-text-image-card-dialog#add_an_icon).
+//
+// Supports
+// [built-in](https://developers.google.com/workspace/chat/format-messages#builtinicons)
+// and
+// [custom](https://developers.google.com/workspace/chat/format-messages#customicons)
+// icons.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Icon struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The icon displayed in the widget on the card.
+ //
+ // Types that are assignable to Icons:
+ //
+ // *Icon_KnownIcon
+ // *Icon_IconUrl
+ // *Icon_MaterialIcon
+ Icons isIcon_Icons `protobuf_oneof:"icons"`
+ // Optional. A description of the icon used for accessibility.
+ // If unspecified, the default value `Button` is provided. As a best practice,
+ // you should set a helpful description for what the icon displays, and if
+ // applicable, what it does. For example, `A user's account portrait`, or
+ // `Opens a new browser tab and navigates to the Google Chat developer
+ // documentation at https://developers.google.com/workspace/chat`.
+ //
+ // If the icon is set in a [`Button`][google.apps.card.v1.Button], the
+ // `altText` appears as helper text when the user hovers over the button.
+ // However, if the button also sets `text`, the icon's `altText` is ignored.
+ AltText string `protobuf:"bytes,3,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"`
+ // The crop style applied to the image. In some cases, applying a
+ // `CIRCLE` crop causes the image to be drawn larger than a built-in
+ // icon.
+ ImageType Widget_ImageType `protobuf:"varint,4,opt,name=image_type,json=imageType,proto3,enum=google.apps.card.v1.Widget_ImageType" json:"image_type,omitempty"`
+}
+
+func (x *Icon) Reset() {
+ *x = Icon{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Icon) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Icon) ProtoMessage() {}
+
+func (x *Icon) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[12]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Icon.ProtoReflect.Descriptor instead.
+func (*Icon) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{12}
+}
+
+func (m *Icon) GetIcons() isIcon_Icons {
+ if m != nil {
+ return m.Icons
+ }
+ return nil
+}
+
+func (x *Icon) GetKnownIcon() string {
+ if x, ok := x.GetIcons().(*Icon_KnownIcon); ok {
+ return x.KnownIcon
+ }
+ return ""
+}
+
+func (x *Icon) GetIconUrl() string {
+ if x, ok := x.GetIcons().(*Icon_IconUrl); ok {
+ return x.IconUrl
+ }
+ return ""
+}
+
+func (x *Icon) GetMaterialIcon() *MaterialIcon {
+ if x, ok := x.GetIcons().(*Icon_MaterialIcon); ok {
+ return x.MaterialIcon
+ }
+ return nil
+}
+
+func (x *Icon) GetAltText() string {
+ if x != nil {
+ return x.AltText
+ }
+ return ""
+}
+
+func (x *Icon) GetImageType() Widget_ImageType {
+ if x != nil {
+ return x.ImageType
+ }
+ return Widget_SQUARE
+}
+
+type isIcon_Icons interface {
+ isIcon_Icons()
+}
+
+type Icon_KnownIcon struct {
+ // Display one of the built-in icons provided by Google Workspace.
+ //
+ // For example, to display an airplane icon, specify `AIRPLANE`.
+ // For a bus, specify `BUS`.
+ //
+ // For a full list of supported icons, see [built-in
+ // icons](https://developers.google.com/workspace/chat/format-messages#builtinicons).
+ KnownIcon string `protobuf:"bytes,1,opt,name=known_icon,json=knownIcon,proto3,oneof"`
+}
+
+type Icon_IconUrl struct {
+ // Display a custom icon hosted at an HTTPS URL.
+ //
+ // For example:
+ //
+ // ```
+ // "iconUrl":
+ // "https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png"
+ // ```
+ //
+ // Supported file types include `.png` and `.jpg`.
+ IconUrl string `protobuf:"bytes,2,opt,name=icon_url,json=iconUrl,proto3,oneof"`
+}
+
+type Icon_MaterialIcon struct {
+ // Display one of the [Google Material
+ // Icons](https://fonts.google.com/icons).
+ //
+ // For example, to display a [checkbox
+ // icon](https://fonts.google.com/icons?selected=Material%20Symbols%20Outlined%3Acheck_box%3AFILL%400%3Bwght%40400%3BGRAD%400%3Bopsz%4048),
+ // use
+ // ```
+ //
+ // "material_icon": {
+ // "name": "check_box"
+ // }
+ //
+ // ```
+ //
+ // [Google Chat apps](https://developers.google.com/workspace/chat):
+ MaterialIcon *MaterialIcon `protobuf:"bytes,5,opt,name=material_icon,json=materialIcon,proto3,oneof"`
+}
+
+func (*Icon_KnownIcon) isIcon_Icons() {}
+
+func (*Icon_IconUrl) isIcon_Icons() {}
+
+func (*Icon_MaterialIcon) isIcon_Icons() {}
+
+// A [Google Material Icon](https://fonts.google.com/icons), which includes over
+// 2500+ options.
+//
+// For example, to display a [checkbox
+// icon](https://fonts.google.com/icons?selected=Material%20Symbols%20Outlined%3Acheck_box%3AFILL%400%3Bwght%40400%3BGRAD%400%3Bopsz%4048)
+// with customized weight and grade, write the following:
+//
+// ```
+//
+// {
+// "name": "check_box",
+// "fill": true,
+// "weight": 300,
+// "grade": -25
+// }
+//
+// ```
+//
+// [Google Chat apps](https://developers.google.com/workspace/chat):
+type MaterialIcon struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The icon name defined in the [Google Material
+ // Icon](https://fonts.google.com/icons), for example, `check_box`. Any
+ // invalid names are abandoned and replaced with empty string and
+ // results in the icon failing to render.
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // Whether the icon renders as filled. Default value is false.
+ //
+ // To preview different icon settings, go to
+ // [Google Font Icons](https://fonts.google.com/icons) and adjust the
+ // settings under **Customize**.
+ Fill bool `protobuf:"varint,2,opt,name=fill,proto3" json:"fill,omitempty"`
+ // The stroke weight of the icon. Choose from {100, 200, 300, 400,
+ // 500, 600, 700}. If absent, default value is 400. If any other value is
+ // specified, the default value is used.
+ //
+ // To preview different icon settings, go to
+ // [Google Font Icons](https://fonts.google.com/icons) and adjust the
+ // settings under **Customize**.
+ Weight int32 `protobuf:"varint,3,opt,name=weight,proto3" json:"weight,omitempty"`
+ // Weight and grade affect a symbol’s thickness. Adjustments to grade are more
+ // granular than adjustments to weight and have a small impact on the size of
+ // the symbol. Choose from {-25, 0, 200}. If absent, default value is 0. If
+ // any other value is specified, the default value is used.
+ //
+ // To preview different icon settings, go to
+ // [Google Font Icons](https://fonts.google.com/icons) and adjust the
+ // settings under **Customize**.
+ Grade int32 `protobuf:"varint,4,opt,name=grade,proto3" json:"grade,omitempty"`
+}
+
+func (x *MaterialIcon) Reset() {
+ *x = MaterialIcon{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MaterialIcon) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MaterialIcon) ProtoMessage() {}
+
+func (x *MaterialIcon) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[13]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MaterialIcon.ProtoReflect.Descriptor instead.
+func (*MaterialIcon) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *MaterialIcon) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *MaterialIcon) GetFill() bool {
+ if x != nil {
+ return x.Fill
+ }
+ return false
+}
+
+func (x *MaterialIcon) GetWeight() int32 {
+ if x != nil {
+ return x.Weight
+ }
+ return 0
+}
+
+func (x *MaterialIcon) GetGrade() int32 {
+ if x != nil {
+ return x.Grade
+ }
+ return 0
+}
+
+// Represents the crop style applied to an image.
+//
+// [Google Workspace Add-ons and
+// Chat apps](https://developers.google.com/workspace/extend):
+//
+// For example, here's how to apply a 16:9 aspect ratio:
+//
+// ```
+//
+// cropStyle {
+// "type": "RECTANGLE_CUSTOM",
+// "aspectRatio": 16/9
+// }
+//
+// ```
+type ImageCropStyle struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The crop type.
+ Type ImageCropStyle_ImageCropType `protobuf:"varint,1,opt,name=type,proto3,enum=google.apps.card.v1.ImageCropStyle_ImageCropType" json:"type,omitempty"`
+ // The aspect ratio to use if the crop type is `RECTANGLE_CUSTOM`.
+ //
+ // For example, here's how to apply a 16:9 aspect ratio:
+ //
+ // ```
+ //
+ // cropStyle {
+ // "type": "RECTANGLE_CUSTOM",
+ // "aspectRatio": 16/9
+ // }
+ //
+ // ```
+ AspectRatio float64 `protobuf:"fixed64,2,opt,name=aspect_ratio,json=aspectRatio,proto3" json:"aspect_ratio,omitempty"`
+}
+
+func (x *ImageCropStyle) Reset() {
+ *x = ImageCropStyle{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ImageCropStyle) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ImageCropStyle) ProtoMessage() {}
+
+func (x *ImageCropStyle) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[14]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ImageCropStyle.ProtoReflect.Descriptor instead.
+func (*ImageCropStyle) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *ImageCropStyle) GetType() ImageCropStyle_ImageCropType {
+ if x != nil {
+ return x.Type
+ }
+ return ImageCropStyle_IMAGE_CROP_TYPE_UNSPECIFIED
+}
+
+func (x *ImageCropStyle) GetAspectRatio() float64 {
+ if x != nil {
+ return x.AspectRatio
+ }
+ return 0
+}
+
+// The style options for the border of a card or widget, including the border
+// type and color.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type BorderStyle struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The border type.
+ Type BorderStyle_BorderType `protobuf:"varint,1,opt,name=type,proto3,enum=google.apps.card.v1.BorderStyle_BorderType" json:"type,omitempty"`
+ // The colors to use when the type is `BORDER_TYPE_STROKE`.
+ StrokeColor *color.Color `protobuf:"bytes,2,opt,name=stroke_color,json=strokeColor,proto3" json:"stroke_color,omitempty"`
+ // The corner radius for the border.
+ CornerRadius int32 `protobuf:"varint,3,opt,name=corner_radius,json=cornerRadius,proto3" json:"corner_radius,omitempty"`
+}
+
+func (x *BorderStyle) Reset() {
+ *x = BorderStyle{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BorderStyle) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BorderStyle) ProtoMessage() {}
+
+func (x *BorderStyle) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[15]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BorderStyle.ProtoReflect.Descriptor instead.
+func (*BorderStyle) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *BorderStyle) GetType() BorderStyle_BorderType {
+ if x != nil {
+ return x.Type
+ }
+ return BorderStyle_BORDER_TYPE_UNSPECIFIED
+}
+
+func (x *BorderStyle) GetStrokeColor() *color.Color {
+ if x != nil {
+ return x.StrokeColor
+ }
+ return nil
+}
+
+func (x *BorderStyle) GetCornerRadius() int32 {
+ if x != nil {
+ return x.CornerRadius
+ }
+ return 0
+}
+
+// Represents an image.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type ImageComponent struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The image URL.
+ ImageUri string `protobuf:"bytes,1,opt,name=image_uri,json=imageUri,proto3" json:"image_uri,omitempty"`
+ // The accessibility label for the image.
+ AltText string `protobuf:"bytes,2,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"`
+ // The crop style to apply to the image.
+ CropStyle *ImageCropStyle `protobuf:"bytes,3,opt,name=crop_style,json=cropStyle,proto3" json:"crop_style,omitempty"`
+ // The border style to apply to the image.
+ BorderStyle *BorderStyle `protobuf:"bytes,4,opt,name=border_style,json=borderStyle,proto3" json:"border_style,omitempty"`
+}
+
+func (x *ImageComponent) Reset() {
+ *x = ImageComponent{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ImageComponent) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ImageComponent) ProtoMessage() {}
+
+func (x *ImageComponent) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[16]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ImageComponent.ProtoReflect.Descriptor instead.
+func (*ImageComponent) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *ImageComponent) GetImageUri() string {
+ if x != nil {
+ return x.ImageUri
+ }
+ return ""
+}
+
+func (x *ImageComponent) GetAltText() string {
+ if x != nil {
+ return x.AltText
+ }
+ return ""
+}
+
+func (x *ImageComponent) GetCropStyle() *ImageCropStyle {
+ if x != nil {
+ return x.CropStyle
+ }
+ return nil
+}
+
+func (x *ImageComponent) GetBorderStyle() *BorderStyle {
+ if x != nil {
+ return x.BorderStyle
+ }
+ return nil
+}
+
+// Displays a grid with a collection of items. Items can only include text or
+// images. For responsive columns, or to include more than text or images, use
+// [`Columns`][google.apps.card.v1.Columns]. For an example in Google Chat apps,
+// see [Display a Grid with a collection of
+// items](https://developers.google.com/workspace/chat/format-structure-card-dialog#display_a_grid_with_a_collection_of_items).
+//
+// A grid supports any number of columns and items. The number of rows is
+// determined by items divided by columns. A grid with
+// 10 items and 2 columns has 5 rows. A grid with 11 items and 2 columns
+// has 6 rows.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+//
+// For example, the following JSON creates a 2 column grid with a single
+// item:
+//
+// ```
+//
+// "grid": {
+// "title": "A fine collection of items",
+// "columnCount": 2,
+// "borderStyle": {
+// "type": "STROKE",
+// "cornerRadius": 4
+// },
+// "items": [
+// {
+// "image": {
+// "imageUri": "https://www.example.com/image.png",
+// "cropStyle": {
+// "type": "SQUARE"
+// },
+// "borderStyle": {
+// "type": "STROKE"
+// }
+// },
+// "title": "An item",
+// "textAlignment": "CENTER"
+// }
+// ],
+// "onClick": {
+// "openLink": {
+// "url": "https://www.example.com"
+// }
+// }
+// }
+//
+// ```
+type Grid struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The text that displays in the grid header.
+ Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
+ // The items to display in the grid.
+ Items []*Grid_GridItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"`
+ // The border style to apply to each grid item.
+ BorderStyle *BorderStyle `protobuf:"bytes,3,opt,name=border_style,json=borderStyle,proto3" json:"border_style,omitempty"`
+ // The number of columns to display in the grid. A default value
+ // is used if this field isn't specified, and that default value is
+ // different depending on where the grid is shown (dialog versus companion).
+ ColumnCount int32 `protobuf:"varint,4,opt,name=column_count,json=columnCount,proto3" json:"column_count,omitempty"`
+ // This callback is reused by each individual grid item, but with the
+ // item's identifier and index in the items list added to the callback's
+ // parameters.
+ OnClick *OnClick `protobuf:"bytes,5,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"`
+}
+
+func (x *Grid) Reset() {
+ *x = Grid{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Grid) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Grid) ProtoMessage() {}
+
+func (x *Grid) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[17]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Grid.ProtoReflect.Descriptor instead.
+func (*Grid) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *Grid) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *Grid) GetItems() []*Grid_GridItem {
+ if x != nil {
+ return x.Items
+ }
+ return nil
+}
+
+func (x *Grid) GetBorderStyle() *BorderStyle {
+ if x != nil {
+ return x.BorderStyle
+ }
+ return nil
+}
+
+func (x *Grid) GetColumnCount() int32 {
+ if x != nil {
+ return x.ColumnCount
+ }
+ return 0
+}
+
+func (x *Grid) GetOnClick() *OnClick {
+ if x != nil {
+ return x.OnClick
+ }
+ return nil
+}
+
+// The `Columns` widget displays up to 2 columns in a card or dialog. You can
+// add widgets to each column; the widgets appear in the order that they are
+// specified. For an example in Google Chat apps, see
+// [Display cards and dialogs in
+// columns](https://developers.google.com/workspace/chat/format-structure-card-dialog#display_cards_and_dialogs_in_columns).
+//
+// The height of each column is determined by the taller column. For example, if
+// the first column is taller than the second column, both columns have the
+// height of the first column. Because each column can contain a different
+// number of widgets, you can't define rows or align widgets between the
+// columns.
+//
+// Columns are displayed side-by-side. You can customize the width of each
+// column using the `HorizontalSizeStyle` field. If the user's
+// screen width is too narrow, the second column wraps below the first:
+//
+// - On web, the second column wraps if the screen width is less than or equal
+// to 480 pixels.
+// - On iOS devices, the second column wraps if the screen width is
+// less than or equal to 300 pt.
+// - On Android devices, the second column wraps if the screen width is
+// less than or equal to 320 dp.
+//
+// To include more than 2 columns, or to use rows, use the
+// [`Grid`][google.apps.card.v1.Grid] widget.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+// Columns for Google Workspace Add-ons are in
+// Developer Preview.
+type Columns struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // An array of columns. You can include up to 2 columns in a card or dialog.
+ ColumnItems []*Columns_Column `protobuf:"bytes,2,rep,name=column_items,json=columnItems,proto3" json:"column_items,omitempty"`
+}
+
+func (x *Columns) Reset() {
+ *x = Columns{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Columns) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Columns) ProtoMessage() {}
+
+func (x *Columns) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[18]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Columns.ProtoReflect.Descriptor instead.
+func (*Columns) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *Columns) GetColumnItems() []*Columns_Column {
+ if x != nil {
+ return x.ColumnItems
+ }
+ return nil
+}
+
+// Represents how to respond when users click an interactive element on
+// a card, such as a button.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type OnClick struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Types that are assignable to Data:
+ //
+ // *OnClick_Action
+ // *OnClick_OpenLink
+ // *OnClick_OpenDynamicLinkAction
+ // *OnClick_Card
+ Data isOnClick_Data `protobuf_oneof:"data"`
+}
+
+func (x *OnClick) Reset() {
+ *x = OnClick{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *OnClick) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OnClick) ProtoMessage() {}
+
+func (x *OnClick) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[19]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use OnClick.ProtoReflect.Descriptor instead.
+func (*OnClick) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{19}
+}
+
+func (m *OnClick) GetData() isOnClick_Data {
+ if m != nil {
+ return m.Data
+ }
+ return nil
+}
+
+func (x *OnClick) GetAction() *Action {
+ if x, ok := x.GetData().(*OnClick_Action); ok {
+ return x.Action
+ }
+ return nil
+}
+
+func (x *OnClick) GetOpenLink() *OpenLink {
+ if x, ok := x.GetData().(*OnClick_OpenLink); ok {
+ return x.OpenLink
+ }
+ return nil
+}
+
+func (x *OnClick) GetOpenDynamicLinkAction() *Action {
+ if x, ok := x.GetData().(*OnClick_OpenDynamicLinkAction); ok {
+ return x.OpenDynamicLinkAction
+ }
+ return nil
+}
+
+func (x *OnClick) GetCard() *Card {
+ if x, ok := x.GetData().(*OnClick_Card); ok {
+ return x.Card
+ }
+ return nil
+}
+
+type isOnClick_Data interface {
+ isOnClick_Data()
+}
+
+type OnClick_Action struct {
+ // If specified, an action is triggered by this `onClick`.
+ Action *Action `protobuf:"bytes,1,opt,name=action,proto3,oneof"`
+}
+
+type OnClick_OpenLink struct {
+ // If specified, this `onClick` triggers an open link action.
+ OpenLink *OpenLink `protobuf:"bytes,2,opt,name=open_link,json=openLink,proto3,oneof"`
+}
+
+type OnClick_OpenDynamicLinkAction struct {
+ // An add-on triggers this action when the action needs to open a
+ // link. This differs from the `open_link` above in that this needs to talk
+ // to server to get the link. Thus some preparation work is required for
+ // web client to do before the open link action response comes back.
+ //
+ // [Google Workspace
+ // Add-ons](https://developers.google.com/workspace/add-ons):
+ OpenDynamicLinkAction *Action `protobuf:"bytes,3,opt,name=open_dynamic_link_action,json=openDynamicLinkAction,proto3,oneof"`
+}
+
+type OnClick_Card struct {
+ // A new card is pushed to the card stack after clicking if specified.
+ //
+ // [Google Workspace
+ // Add-ons](https://developers.google.com/workspace/add-ons):
+ Card *Card `protobuf:"bytes,4,opt,name=card,proto3,oneof"`
+}
+
+func (*OnClick_Action) isOnClick_Data() {}
+
+func (*OnClick_OpenLink) isOnClick_Data() {}
+
+func (*OnClick_OpenDynamicLinkAction) isOnClick_Data() {}
+
+func (*OnClick_Card) isOnClick_Data() {}
+
+// Represents an `onClick` event that opens a hyperlink.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type OpenLink struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The URL to open.
+ Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
+ // How to open a link.
+ //
+ // [Google Workspace
+ // Add-ons](https://developers.google.com/workspace/add-ons):
+ OpenAs OpenLink_OpenAs `protobuf:"varint,2,opt,name=open_as,json=openAs,proto3,enum=google.apps.card.v1.OpenLink_OpenAs" json:"open_as,omitempty"`
+ // Whether the client forgets about a link after opening it, or observes it
+ // until the window closes.
+ //
+ // [Google Workspace
+ // Add-ons](https://developers.google.com/workspace/add-ons):
+ OnClose OpenLink_OnClose `protobuf:"varint,3,opt,name=on_close,json=onClose,proto3,enum=google.apps.card.v1.OpenLink_OnClose" json:"on_close,omitempty"`
+}
+
+func (x *OpenLink) Reset() {
+ *x = OpenLink{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *OpenLink) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OpenLink) ProtoMessage() {}
+
+func (x *OpenLink) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[20]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use OpenLink.ProtoReflect.Descriptor instead.
+func (*OpenLink) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *OpenLink) GetUrl() string {
+ if x != nil {
+ return x.Url
+ }
+ return ""
+}
+
+func (x *OpenLink) GetOpenAs() OpenLink_OpenAs {
+ if x != nil {
+ return x.OpenAs
+ }
+ return OpenLink_FULL_SIZE
+}
+
+func (x *OpenLink) GetOnClose() OpenLink_OnClose {
+ if x != nil {
+ return x.OnClose
+ }
+ return OpenLink_NOTHING
+}
+
+// An action that describes the behavior when the form is submitted.
+// For example, you can invoke an Apps Script script to handle the form.
+// If the action is triggered, the form values are sent to the server.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Action struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // A custom function to invoke when the containing element is
+ // clicked or othrwise activated.
+ //
+ // For example usage, see [Read form
+ // data](https://developers.google.com/workspace/chat/read-form-data).
+ Function string `protobuf:"bytes,1,opt,name=function,proto3" json:"function,omitempty"`
+ // List of action parameters.
+ Parameters []*Action_ActionParameter `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty"`
+ // Specifies the loading indicator that the action displays while
+ // making the call to the action.
+ LoadIndicator Action_LoadIndicator `protobuf:"varint,3,opt,name=load_indicator,json=loadIndicator,proto3,enum=google.apps.card.v1.Action_LoadIndicator" json:"load_indicator,omitempty"`
+ // Indicates whether form values persist after the action. The default value
+ // is `false`.
+ //
+ // If `true`, form values remain after the action is triggered. To let the
+ // user make changes while the action is being processed, set
+ // [`LoadIndicator`](https://developers.google.com/workspace/add-ons/reference/rpc/google.apps.card.v1#loadindicator)
+ // to `NONE`. For [card
+ // messages](https://developers.google.com/workspace/chat/api/guides/v1/messages/create#create)
+ // in Chat apps, you must also set the action's
+ // [`ResponseType`](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages#responsetype)
+ // to `UPDATE_MESSAGE` and use the same
+ // [`card_id`](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages#CardWithId)
+ // from the card that contained the action.
+ //
+ // If `false`, the form values are cleared when the action is triggered.
+ // To prevent the user from making changes while the action is being
+ // processed, set
+ // [`LoadIndicator`](https://developers.google.com/workspace/add-ons/reference/rpc/google.apps.card.v1#loadindicator)
+ // to `SPINNER`.
+ PersistValues bool `protobuf:"varint,4,opt,name=persist_values,json=persistValues,proto3" json:"persist_values,omitempty"`
+ // Optional. Required when opening a
+ // [dialog](https://developers.google.com/workspace/chat/dialogs).
+ //
+ // What to do in response to an interaction with a user, such as a user
+ // clicking a button in a card message.
+ //
+ // If unspecified, the app responds by executing an `action`—like opening a
+ // link or running a function—as normal.
+ //
+ // By specifying an `interaction`, the app can respond in special interactive
+ // ways. For example, by setting `interaction` to `OPEN_DIALOG`, the app can
+ // open a [dialog](https://developers.google.com/workspace/chat/dialogs). When
+ // specified, a loading indicator isn't shown. If specified for
+ // an add-on, the entire card is stripped and nothing is shown in the client.
+ //
+ // [Google Chat apps](https://developers.google.com/workspace/chat):
+ Interaction Action_Interaction `protobuf:"varint,5,opt,name=interaction,proto3,enum=google.apps.card.v1.Action_Interaction" json:"interaction,omitempty"`
+}
+
+func (x *Action) Reset() {
+ *x = Action{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Action) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Action) ProtoMessage() {}
+
+func (x *Action) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[21]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Action.ProtoReflect.Descriptor instead.
+func (*Action) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *Action) GetFunction() string {
+ if x != nil {
+ return x.Function
+ }
+ return ""
+}
+
+func (x *Action) GetParameters() []*Action_ActionParameter {
+ if x != nil {
+ return x.Parameters
+ }
+ return nil
+}
+
+func (x *Action) GetLoadIndicator() Action_LoadIndicator {
+ if x != nil {
+ return x.LoadIndicator
+ }
+ return Action_SPINNER
+}
+
+func (x *Action) GetPersistValues() bool {
+ if x != nil {
+ return x.PersistValues
+ }
+ return false
+}
+
+func (x *Action) GetInteraction() Action_Interaction {
+ if x != nil {
+ return x.Interaction
+ }
+ return Action_INTERACTION_UNSPECIFIED
+}
+
+// Represents a card header. For an example in Google Chat apps, see [Add a
+// header](https://developers.google.com/workspace/chat/design-components-card-dialog#add_a_header).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Card_CardHeader struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Required. The title of the card header.
+ // The header has a fixed height: if both a
+ // title and subtitle are specified, each takes up one line. If only the
+ // title is specified, it takes up both lines.
+ Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
+ // The subtitle of the card header. If specified, appears on its own line
+ // below the `title`.
+ Subtitle string `protobuf:"bytes,2,opt,name=subtitle,proto3" json:"subtitle,omitempty"`
+ // The shape used to crop the image.
+ //
+ // [Google Workspace Add-ons and Chat
+ // apps](https://developers.google.com/workspace/extend):
+ ImageType Widget_ImageType `protobuf:"varint,3,opt,name=image_type,json=imageType,proto3,enum=google.apps.card.v1.Widget_ImageType" json:"image_type,omitempty"`
+ // The HTTPS URL of the image in the card header.
+ ImageUrl string `protobuf:"bytes,4,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"`
+ // The alternative text of this image that's used for accessibility.
+ ImageAltText string `protobuf:"bytes,5,opt,name=image_alt_text,json=imageAltText,proto3" json:"image_alt_text,omitempty"`
+}
+
+func (x *Card_CardHeader) Reset() {
+ *x = Card_CardHeader{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[22]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Card_CardHeader) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Card_CardHeader) ProtoMessage() {}
+
+func (x *Card_CardHeader) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[22]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Card_CardHeader.ProtoReflect.Descriptor instead.
+func (*Card_CardHeader) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 0}
+}
+
+func (x *Card_CardHeader) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *Card_CardHeader) GetSubtitle() string {
+ if x != nil {
+ return x.Subtitle
+ }
+ return ""
+}
+
+func (x *Card_CardHeader) GetImageType() Widget_ImageType {
+ if x != nil {
+ return x.ImageType
+ }
+ return Widget_SQUARE
+}
+
+func (x *Card_CardHeader) GetImageUrl() string {
+ if x != nil {
+ return x.ImageUrl
+ }
+ return ""
+}
+
+func (x *Card_CardHeader) GetImageAltText() string {
+ if x != nil {
+ return x.ImageAltText
+ }
+ return ""
+}
+
+// A section contains a collection of widgets that are rendered
+// vertically in the order that they're specified.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Card_Section struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Text that appears at the top of a section.
+ // Supports simple HTML formatted text. For more information
+ // about formatting text, see
+ // [Formatting text in Google Chat
+ // apps](https://developers.google.com/workspace/chat/format-messages#card-formatting)
+ // and
+ // [Formatting
+ // text in Google Workspace
+ // Add-ons](https://developers.google.com/apps-script/add-ons/concepts/widgets#text_formatting).
+ Header string `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
+ // All the widgets in the section.
+ // Must contain at least one widget.
+ Widgets []*Widget `protobuf:"bytes,2,rep,name=widgets,proto3" json:"widgets,omitempty"`
+ // Indicates whether this section is collapsible.
+ //
+ // Collapsible sections hide some or all widgets, but users can expand the
+ // section to reveal the hidden widgets by clicking **Show more**. Users
+ // can hide the widgets again by clicking **Show less**.
+ //
+ // To determine which widgets are hidden, specify
+ // `uncollapsibleWidgetsCount`.
+ Collapsible bool `protobuf:"varint,5,opt,name=collapsible,proto3" json:"collapsible,omitempty"`
+ // The number of uncollapsible widgets which remain visible even when a
+ // section is collapsed.
+ //
+ // For example, when a section
+ // contains five widgets and the `uncollapsibleWidgetsCount` is set to `2`,
+ // the first two widgets are always shown and the last three are collapsed
+ // by default. The `uncollapsibleWidgetsCount` is taken into account only
+ // when `collapsible` is `true`.
+ UncollapsibleWidgetsCount int32 `protobuf:"varint,6,opt,name=uncollapsible_widgets_count,json=uncollapsibleWidgetsCount,proto3" json:"uncollapsible_widgets_count,omitempty"`
+}
+
+func (x *Card_Section) Reset() {
+ *x = Card_Section{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Card_Section) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Card_Section) ProtoMessage() {}
+
+func (x *Card_Section) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[23]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Card_Section.ProtoReflect.Descriptor instead.
+func (*Card_Section) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 1}
+}
+
+func (x *Card_Section) GetHeader() string {
+ if x != nil {
+ return x.Header
+ }
+ return ""
+}
+
+func (x *Card_Section) GetWidgets() []*Widget {
+ if x != nil {
+ return x.Widgets
+ }
+ return nil
+}
+
+func (x *Card_Section) GetCollapsible() bool {
+ if x != nil {
+ return x.Collapsible
+ }
+ return false
+}
+
+func (x *Card_Section) GetUncollapsibleWidgetsCount() int32 {
+ if x != nil {
+ return x.UncollapsibleWidgetsCount
+ }
+ return 0
+}
+
+// A card action is the action associated with the card. For example,
+// an invoice card might include actions such as delete invoice, email
+// invoice, or open the invoice in a browser.
+//
+// [Google Workspace
+// Add-ons](https://developers.google.com/workspace/add-ons):
+type Card_CardAction struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The label that displays as the action menu item.
+ ActionLabel string `protobuf:"bytes,1,opt,name=action_label,json=actionLabel,proto3" json:"action_label,omitempty"`
+ // The `onClick` action for this action item.
+ OnClick *OnClick `protobuf:"bytes,2,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"`
+}
+
+func (x *Card_CardAction) Reset() {
+ *x = Card_CardAction{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[24]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Card_CardAction) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Card_CardAction) ProtoMessage() {}
+
+func (x *Card_CardAction) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[24]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Card_CardAction.ProtoReflect.Descriptor instead.
+func (*Card_CardAction) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 2}
+}
+
+func (x *Card_CardAction) GetActionLabel() string {
+ if x != nil {
+ return x.ActionLabel
+ }
+ return ""
+}
+
+func (x *Card_CardAction) GetOnClick() *OnClick {
+ if x != nil {
+ return x.OnClick
+ }
+ return nil
+}
+
+// A persistent (sticky) footer that that appears at the bottom of the card.
+//
+// Setting `fixedFooter` without specifying a `primaryButton` or a
+// `secondaryButton` causes an error.
+//
+// For Chat apps, you can use fixed footers in
+// [dialogs](https://developers.google.com/workspace/chat/dialogs), but not
+// [card
+// messages](https://developers.google.com/workspace/chat/create-messages#create).
+// For an example in Google Chat apps, see [Add a persistent
+// footer](https://developers.google.com/workspace/chat/design-components-card-dialog#add_a_persistent_footer).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Card_CardFixedFooter struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The primary button of the fixed footer. The button must be a text button
+ // with text and color set.
+ PrimaryButton *Button `protobuf:"bytes,1,opt,name=primary_button,json=primaryButton,proto3" json:"primary_button,omitempty"`
+ // The secondary button of the fixed footer. The button must be a text
+ // button with text and color set.
+ // If `secondaryButton` is set, you must also set `primaryButton`.
+ SecondaryButton *Button `protobuf:"bytes,2,opt,name=secondary_button,json=secondaryButton,proto3" json:"secondary_button,omitempty"`
+}
+
+func (x *Card_CardFixedFooter) Reset() {
+ *x = Card_CardFixedFooter{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[25]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Card_CardFixedFooter) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Card_CardFixedFooter) ProtoMessage() {}
+
+func (x *Card_CardFixedFooter) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[25]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Card_CardFixedFooter.ProtoReflect.Descriptor instead.
+func (*Card_CardFixedFooter) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 3}
+}
+
+func (x *Card_CardFixedFooter) GetPrimaryButton() *Button {
+ if x != nil {
+ return x.PrimaryButton
+ }
+ return nil
+}
+
+func (x *Card_CardFixedFooter) GetSecondaryButton() *Button {
+ if x != nil {
+ return x.SecondaryButton
+ }
+ return nil
+}
+
+// Either a toggle-style switch or a checkbox inside a `decoratedText` widget.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+//
+// Only supported in the `decoratedText` widget.
+type DecoratedText_SwitchControl struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name by which the switch widget is identified in a form input event.
+ //
+ // For details about working with form inputs, see [Receive form
+ // data](https://developers.google.com/workspace/chat/read-form-data).
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // The value entered by a user, returned as part of a form input event.
+ //
+ // For details about working with form inputs, see [Receive form
+ // data](https://developers.google.com/workspace/chat/read-form-data).
+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+ // When `true`, the switch is selected.
+ Selected bool `protobuf:"varint,3,opt,name=selected,proto3" json:"selected,omitempty"`
+ // The action to perform when the switch state is changed, such as what
+ //
+ // function to run.
+ OnChangeAction *Action `protobuf:"bytes,4,opt,name=on_change_action,json=onChangeAction,proto3" json:"on_change_action,omitempty"`
+ // How the switch appears in the user interface.
+ //
+ // [Google Workspace Add-ons
+ // and Chat apps](https://developers.google.com/workspace/extend):
+ ControlType DecoratedText_SwitchControl_ControlType `protobuf:"varint,5,opt,name=control_type,json=controlType,proto3,enum=google.apps.card.v1.DecoratedText_SwitchControl_ControlType" json:"control_type,omitempty"`
+}
+
+func (x *DecoratedText_SwitchControl) Reset() {
+ *x = DecoratedText_SwitchControl{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[26]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DecoratedText_SwitchControl) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DecoratedText_SwitchControl) ProtoMessage() {}
+
+func (x *DecoratedText_SwitchControl) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[26]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DecoratedText_SwitchControl.ProtoReflect.Descriptor instead.
+func (*DecoratedText_SwitchControl) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{5, 0}
+}
+
+func (x *DecoratedText_SwitchControl) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *DecoratedText_SwitchControl) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+
+func (x *DecoratedText_SwitchControl) GetSelected() bool {
+ if x != nil {
+ return x.Selected
+ }
+ return false
+}
+
+func (x *DecoratedText_SwitchControl) GetOnChangeAction() *Action {
+ if x != nil {
+ return x.OnChangeAction
+ }
+ return nil
+}
+
+func (x *DecoratedText_SwitchControl) GetControlType() DecoratedText_SwitchControl_ControlType {
+ if x != nil {
+ return x.ControlType
+ }
+ return DecoratedText_SwitchControl_SWITCH
+}
+
+// One suggested value that users can enter in a text input field.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Suggestions_SuggestionItem struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Types that are assignable to Content:
+ //
+ // *Suggestions_SuggestionItem_Text
+ Content isSuggestions_SuggestionItem_Content `protobuf_oneof:"content"`
+}
+
+func (x *Suggestions_SuggestionItem) Reset() {
+ *x = Suggestions_SuggestionItem{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[27]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Suggestions_SuggestionItem) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Suggestions_SuggestionItem) ProtoMessage() {}
+
+func (x *Suggestions_SuggestionItem) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[27]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Suggestions_SuggestionItem.ProtoReflect.Descriptor instead.
+func (*Suggestions_SuggestionItem) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{7, 0}
+}
+
+func (m *Suggestions_SuggestionItem) GetContent() isSuggestions_SuggestionItem_Content {
+ if m != nil {
+ return m.Content
+ }
+ return nil
+}
+
+func (x *Suggestions_SuggestionItem) GetText() string {
+ if x, ok := x.GetContent().(*Suggestions_SuggestionItem_Text); ok {
+ return x.Text
+ }
+ return ""
+}
+
+type isSuggestions_SuggestionItem_Content interface {
+ isSuggestions_SuggestionItem_Content()
+}
+
+type Suggestions_SuggestionItem_Text struct {
+ // The value of a suggested input to a text input field. This is
+ // equivalent to what users enter themselves.
+ Text string `protobuf:"bytes,1,opt,name=text,proto3,oneof"`
+}
+
+func (*Suggestions_SuggestionItem_Text) isSuggestions_SuggestionItem_Content() {}
+
+// An item that users can select in a selection input, such as a checkbox
+// or switch.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type SelectionInput_SelectionItem struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The text that identifies or describes the item to users.
+ Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+ // The value associated with this item. The client should use this as a form
+ // input value.
+ //
+ // For details about working with form inputs, see [Receive form
+ // data](https://developers.google.com/workspace/chat/read-form-data).
+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+ // Whether the item is selected by default. If the selection input only
+ // accepts one value (such as for radio buttons or a dropdown menu), only
+ // set this field for one item.
+ Selected bool `protobuf:"varint,3,opt,name=selected,proto3" json:"selected,omitempty"`
+ // For multiselect menus, the URL for the icon displayed next to
+ // the item's `text` field. Supports PNG and JPEG files. Must be an `HTTPS`
+ // URL. For example,
+ // `https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png`.
+ StartIconUri string `protobuf:"bytes,4,opt,name=start_icon_uri,json=startIconUri,proto3" json:"start_icon_uri,omitempty"`
+ // For multiselect menus, a text description or label that's
+ // displayed below the item's `text` field.
+ BottomText string `protobuf:"bytes,5,opt,name=bottom_text,json=bottomText,proto3" json:"bottom_text,omitempty"`
+}
+
+func (x *SelectionInput_SelectionItem) Reset() {
+ *x = SelectionInput_SelectionItem{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[28]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SelectionInput_SelectionItem) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SelectionInput_SelectionItem) ProtoMessage() {}
+
+func (x *SelectionInput_SelectionItem) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[28]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SelectionInput_SelectionItem.ProtoReflect.Descriptor instead.
+func (*SelectionInput_SelectionItem) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9, 0}
+}
+
+func (x *SelectionInput_SelectionItem) GetText() string {
+ if x != nil {
+ return x.Text
+ }
+ return ""
+}
+
+func (x *SelectionInput_SelectionItem) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+
+func (x *SelectionInput_SelectionItem) GetSelected() bool {
+ if x != nil {
+ return x.Selected
+ }
+ return false
+}
+
+func (x *SelectionInput_SelectionItem) GetStartIconUri() string {
+ if x != nil {
+ return x.StartIconUri
+ }
+ return ""
+}
+
+func (x *SelectionInput_SelectionItem) GetBottomText() string {
+ if x != nil {
+ return x.BottomText
+ }
+ return ""
+}
+
+// For a
+// [`SelectionInput`][google.apps.card.v1.SelectionInput] widget that uses a
+// multiselect menu, a data source from Google Workspace. Used to populate
+// items in a multiselect menu.
+//
+// [Google Chat apps](https://developers.google.com/workspace/chat):
+type SelectionInput_PlatformDataSource struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The data source.
+ //
+ // Types that are assignable to DataSource:
+ //
+ // *SelectionInput_PlatformDataSource_CommonDataSource_
+ DataSource isSelectionInput_PlatformDataSource_DataSource `protobuf_oneof:"data_source"`
+}
+
+func (x *SelectionInput_PlatformDataSource) Reset() {
+ *x = SelectionInput_PlatformDataSource{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[29]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SelectionInput_PlatformDataSource) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SelectionInput_PlatformDataSource) ProtoMessage() {}
+
+func (x *SelectionInput_PlatformDataSource) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[29]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SelectionInput_PlatformDataSource.ProtoReflect.Descriptor instead.
+func (*SelectionInput_PlatformDataSource) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9, 1}
+}
+
+func (m *SelectionInput_PlatformDataSource) GetDataSource() isSelectionInput_PlatformDataSource_DataSource {
+ if m != nil {
+ return m.DataSource
+ }
+ return nil
+}
+
+func (x *SelectionInput_PlatformDataSource) GetCommonDataSource() SelectionInput_PlatformDataSource_CommonDataSource {
+ if x, ok := x.GetDataSource().(*SelectionInput_PlatformDataSource_CommonDataSource_); ok {
+ return x.CommonDataSource
+ }
+ return SelectionInput_PlatformDataSource_UNKNOWN
+}
+
+type isSelectionInput_PlatformDataSource_DataSource interface {
+ isSelectionInput_PlatformDataSource_DataSource()
+}
+
+type SelectionInput_PlatformDataSource_CommonDataSource_ struct {
+ // A data source shared by all Google Workspace applications, such as
+ // users in a Google Workspace organization.
+ CommonDataSource SelectionInput_PlatformDataSource_CommonDataSource `protobuf:"varint,1,opt,name=common_data_source,json=commonDataSource,proto3,enum=google.apps.card.v1.SelectionInput_PlatformDataSource_CommonDataSource,oneof"`
+}
+
+func (*SelectionInput_PlatformDataSource_CommonDataSource_) isSelectionInput_PlatformDataSource_DataSource() {
+}
+
+// Represents an item in a grid layout. Items can contain text, an image, or
+// both text and an image.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Grid_GridItem struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // A user-specified identifier for this grid item. This identifier is
+ // returned in the parent grid's `onClick` callback parameters.
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ // The image that displays in the grid item.
+ Image *ImageComponent `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"`
+ // The grid item's title.
+ Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
+ // The grid item's subtitle.
+ Subtitle string `protobuf:"bytes,4,opt,name=subtitle,proto3" json:"subtitle,omitempty"`
+ // The layout to use for the grid item.
+ Layout Grid_GridItem_GridItemLayout `protobuf:"varint,9,opt,name=layout,proto3,enum=google.apps.card.v1.Grid_GridItem_GridItemLayout" json:"layout,omitempty"`
+}
+
+func (x *Grid_GridItem) Reset() {
+ *x = Grid_GridItem{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[30]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Grid_GridItem) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Grid_GridItem) ProtoMessage() {}
+
+func (x *Grid_GridItem) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[30]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Grid_GridItem.ProtoReflect.Descriptor instead.
+func (*Grid_GridItem) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{17, 0}
+}
+
+func (x *Grid_GridItem) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *Grid_GridItem) GetImage() *ImageComponent {
+ if x != nil {
+ return x.Image
+ }
+ return nil
+}
+
+func (x *Grid_GridItem) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *Grid_GridItem) GetSubtitle() string {
+ if x != nil {
+ return x.Subtitle
+ }
+ return ""
+}
+
+func (x *Grid_GridItem) GetLayout() Grid_GridItem_GridItemLayout {
+ if x != nil {
+ return x.Layout
+ }
+ return Grid_GridItem_GRID_ITEM_LAYOUT_UNSPECIFIED
+}
+
+// A column.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+// Columns for Google Workspace Add-ons are in
+// Developer Preview.
+type Columns_Column struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Specifies how a column fills the width of the card.
+ HorizontalSizeStyle Columns_Column_HorizontalSizeStyle `protobuf:"varint,1,opt,name=horizontal_size_style,json=horizontalSizeStyle,proto3,enum=google.apps.card.v1.Columns_Column_HorizontalSizeStyle" json:"horizontal_size_style,omitempty"`
+ // Specifies whether widgets align to the left, right, or center of a
+ // column.
+ HorizontalAlignment Widget_HorizontalAlignment `protobuf:"varint,2,opt,name=horizontal_alignment,json=horizontalAlignment,proto3,enum=google.apps.card.v1.Widget_HorizontalAlignment" json:"horizontal_alignment,omitempty"`
+ // Specifies whether widgets align to the top, bottom, or center of a
+ // column.
+ VerticalAlignment Columns_Column_VerticalAlignment `protobuf:"varint,3,opt,name=vertical_alignment,json=verticalAlignment,proto3,enum=google.apps.card.v1.Columns_Column_VerticalAlignment" json:"vertical_alignment,omitempty"`
+ // An array of widgets included in a column. Widgets appear in the order
+ // that they are specified.
+ Widgets []*Columns_Column_Widgets `protobuf:"bytes,4,rep,name=widgets,proto3" json:"widgets,omitempty"`
+}
+
+func (x *Columns_Column) Reset() {
+ *x = Columns_Column{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[31]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Columns_Column) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Columns_Column) ProtoMessage() {}
+
+func (x *Columns_Column) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[31]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Columns_Column.ProtoReflect.Descriptor instead.
+func (*Columns_Column) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18, 0}
+}
+
+func (x *Columns_Column) GetHorizontalSizeStyle() Columns_Column_HorizontalSizeStyle {
+ if x != nil {
+ return x.HorizontalSizeStyle
+ }
+ return Columns_Column_HORIZONTAL_SIZE_STYLE_UNSPECIFIED
+}
+
+func (x *Columns_Column) GetHorizontalAlignment() Widget_HorizontalAlignment {
+ if x != nil {
+ return x.HorizontalAlignment
+ }
+ return Widget_HORIZONTAL_ALIGNMENT_UNSPECIFIED
+}
+
+func (x *Columns_Column) GetVerticalAlignment() Columns_Column_VerticalAlignment {
+ if x != nil {
+ return x.VerticalAlignment
+ }
+ return Columns_Column_VERTICAL_ALIGNMENT_UNSPECIFIED
+}
+
+func (x *Columns_Column) GetWidgets() []*Columns_Column_Widgets {
+ if x != nil {
+ return x.Widgets
+ }
+ return nil
+}
+
+// The supported widgets that you can include in a column.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+// Columns for Google Workspace Add-ons are in
+// Developer Preview.
+type Columns_Column_Widgets struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Types that are assignable to Data:
+ //
+ // *Columns_Column_Widgets_TextParagraph
+ // *Columns_Column_Widgets_Image
+ // *Columns_Column_Widgets_DecoratedText
+ // *Columns_Column_Widgets_ButtonList
+ // *Columns_Column_Widgets_TextInput
+ // *Columns_Column_Widgets_SelectionInput
+ // *Columns_Column_Widgets_DateTimePicker
+ Data isColumns_Column_Widgets_Data `protobuf_oneof:"data"`
+}
+
+func (x *Columns_Column_Widgets) Reset() {
+ *x = Columns_Column_Widgets{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[32]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Columns_Column_Widgets) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Columns_Column_Widgets) ProtoMessage() {}
+
+func (x *Columns_Column_Widgets) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[32]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Columns_Column_Widgets.ProtoReflect.Descriptor instead.
+func (*Columns_Column_Widgets) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18, 0, 0}
+}
+
+func (m *Columns_Column_Widgets) GetData() isColumns_Column_Widgets_Data {
+ if m != nil {
+ return m.Data
+ }
+ return nil
+}
+
+func (x *Columns_Column_Widgets) GetTextParagraph() *TextParagraph {
+ if x, ok := x.GetData().(*Columns_Column_Widgets_TextParagraph); ok {
+ return x.TextParagraph
+ }
+ return nil
+}
+
+func (x *Columns_Column_Widgets) GetImage() *Image {
+ if x, ok := x.GetData().(*Columns_Column_Widgets_Image); ok {
+ return x.Image
+ }
+ return nil
+}
+
+func (x *Columns_Column_Widgets) GetDecoratedText() *DecoratedText {
+ if x, ok := x.GetData().(*Columns_Column_Widgets_DecoratedText); ok {
+ return x.DecoratedText
+ }
+ return nil
+}
+
+func (x *Columns_Column_Widgets) GetButtonList() *ButtonList {
+ if x, ok := x.GetData().(*Columns_Column_Widgets_ButtonList); ok {
+ return x.ButtonList
+ }
+ return nil
+}
+
+func (x *Columns_Column_Widgets) GetTextInput() *TextInput {
+ if x, ok := x.GetData().(*Columns_Column_Widgets_TextInput); ok {
+ return x.TextInput
+ }
+ return nil
+}
+
+func (x *Columns_Column_Widgets) GetSelectionInput() *SelectionInput {
+ if x, ok := x.GetData().(*Columns_Column_Widgets_SelectionInput); ok {
+ return x.SelectionInput
+ }
+ return nil
+}
+
+func (x *Columns_Column_Widgets) GetDateTimePicker() *DateTimePicker {
+ if x, ok := x.GetData().(*Columns_Column_Widgets_DateTimePicker); ok {
+ return x.DateTimePicker
+ }
+ return nil
+}
+
+type isColumns_Column_Widgets_Data interface {
+ isColumns_Column_Widgets_Data()
+}
+
+type Columns_Column_Widgets_TextParagraph struct {
+ // [TextParagraph][google.apps.card.v1.TextParagraph] widget.
+ TextParagraph *TextParagraph `protobuf:"bytes,1,opt,name=text_paragraph,json=textParagraph,proto3,oneof"`
+}
+
+type Columns_Column_Widgets_Image struct {
+ // [Image][google.apps.card.v1.Image] widget.
+ Image *Image `protobuf:"bytes,2,opt,name=image,proto3,oneof"`
+}
+
+type Columns_Column_Widgets_DecoratedText struct {
+ // [DecoratedText][google.apps.card.v1.DecoratedText] widget.
+ DecoratedText *DecoratedText `protobuf:"bytes,3,opt,name=decorated_text,json=decoratedText,proto3,oneof"`
+}
+
+type Columns_Column_Widgets_ButtonList struct {
+ // [ButtonList][google.apps.card.v1.ButtonList] widget.
+ ButtonList *ButtonList `protobuf:"bytes,4,opt,name=button_list,json=buttonList,proto3,oneof"`
+}
+
+type Columns_Column_Widgets_TextInput struct {
+ // [TextInput][google.apps.card.v1.TextInput] widget.
+ TextInput *TextInput `protobuf:"bytes,5,opt,name=text_input,json=textInput,proto3,oneof"`
+}
+
+type Columns_Column_Widgets_SelectionInput struct {
+ // [SelectionInput][google.apps.card.v1.SelectionInput] widget.
+ SelectionInput *SelectionInput `protobuf:"bytes,6,opt,name=selection_input,json=selectionInput,proto3,oneof"`
+}
+
+type Columns_Column_Widgets_DateTimePicker struct {
+ // [DateTimePicker][google.apps.card.v1.DateTimePicker] widget.
+ DateTimePicker *DateTimePicker `protobuf:"bytes,7,opt,name=date_time_picker,json=dateTimePicker,proto3,oneof"`
+}
+
+func (*Columns_Column_Widgets_TextParagraph) isColumns_Column_Widgets_Data() {}
+
+func (*Columns_Column_Widgets_Image) isColumns_Column_Widgets_Data() {}
+
+func (*Columns_Column_Widgets_DecoratedText) isColumns_Column_Widgets_Data() {}
+
+func (*Columns_Column_Widgets_ButtonList) isColumns_Column_Widgets_Data() {}
+
+func (*Columns_Column_Widgets_TextInput) isColumns_Column_Widgets_Data() {}
+
+func (*Columns_Column_Widgets_SelectionInput) isColumns_Column_Widgets_Data() {}
+
+func (*Columns_Column_Widgets_DateTimePicker) isColumns_Column_Widgets_Data() {}
+
+// List of string parameters to supply when the action method is invoked.
+// For example, consider three snooze buttons: snooze now, snooze one day,
+// or snooze next week. You might use `action method = snooze()`, passing the
+// snooze type and snooze time in the list of string parameters.
+//
+// To learn more, see
+// [`CommonEventObject`](https://developers.google.com/workspace/chat/api/reference/rest/v1/Event#commoneventobject).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Action_ActionParameter struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name of the parameter for the action script.
+ Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+ // The value of the parameter.
+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *Action_ActionParameter) Reset() {
+ *x = Action_ActionParameter{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[33]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Action_ActionParameter) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Action_ActionParameter) ProtoMessage() {}
+
+func (x *Action_ActionParameter) ProtoReflect() protoreflect.Message {
+ mi := &file_google_apps_card_v1_card_proto_msgTypes[33]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Action_ActionParameter.ProtoReflect.Descriptor instead.
+func (*Action_ActionParameter) Descriptor() ([]byte, []int) {
+ return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{21, 0}
+}
+
+func (x *Action_ActionParameter) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+
+func (x *Action_ActionParameter) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+
+var File_google_apps_card_v1_card_proto protoreflect.FileDescriptor
+
+var file_google_apps_card_v1_card_proto_rawDesc = []byte{
+ 0x0a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x63, 0x61,
+ 0x72, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x12, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61,
+ 0x72, 0x64, 0x2e, 0x76, 0x31, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x74, 0x79,
+ 0x70, 0x65, 0x2f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd0,
+ 0x0a, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, 0x12, 0x3c, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61,
+ 0x72, 0x64, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68,
+ 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61,
+ 0x72, 0x64, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x15, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+ 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x09, 0x20,
+ 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70,
+ 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x44,
+ 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x13, 0x73, 0x65, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65,
+ 0x12, 0x47, 0x0a, 0x0c, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72,
+ 0x64, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x63, 0x61,
+ 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
+ 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a,
+ 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70,
+ 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x43,
+ 0x61, 0x72, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x52, 0x0b,
+ 0x66, 0x69, 0x78, 0x65, 0x64, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x0d, 0x64,
+ 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01,
+ 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+ 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x44, 0x69,
+ 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x70,
+ 0x6c, 0x61, 0x79, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x4e, 0x0a, 0x10, 0x70, 0x65, 0x65, 0x6b,
+ 0x5f, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+ 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x43, 0x61,
+ 0x72, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0e, 0x70, 0x65, 0x65, 0x6b, 0x43, 0x61,
+ 0x72, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x1a, 0xc7, 0x01, 0x0a, 0x0a, 0x43, 0x61, 0x72,
+ 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a,
+ 0x08, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x08, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x69, 0x6d, 0x61,
+ 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64,
+ 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65,
+ 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12,
+ 0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x24, 0x0a, 0x0e,
+ 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x41, 0x6c, 0x74, 0x54, 0x65,
+ 0x78, 0x74, 0x1a, 0xba, 0x01, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16,
+ 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+ 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x07, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74,
+ 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69,
+ 0x64, 0x67, 0x65, 0x74, 0x52, 0x07, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x12, 0x20, 0x0a,
+ 0x0b, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12,
+ 0x3e, 0x0a, 0x1b, 0x75, 0x6e, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x5f, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x75, 0x6e, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a,
+ 0x68, 0x0a, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a,
+ 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c,
+ 0x12, 0x37, 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+ 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b,
+ 0x52, 0x07, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x1a, 0x9d, 0x01, 0x0a, 0x0f, 0x43, 0x61,
+ 0x72, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x42, 0x0a,
+ 0x0e, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+ 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74,
+ 0x6f, 0x6e, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x42, 0x75, 0x74, 0x74, 0x6f,
+ 0x6e, 0x12, 0x46, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x62,
+ 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76,
+ 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+ 0x61, 0x72, 0x79, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x0c, 0x44, 0x69, 0x76,
+ 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x44, 0x49, 0x56,
+ 0x49, 0x44, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x59, 0x4c, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
+ 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x4f, 0x4c, 0x49,
+ 0x44, 0x5f, 0x44, 0x49, 0x56, 0x49, 0x44, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4e,
+ 0x4f, 0x5f, 0x44, 0x49, 0x56, 0x49, 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x44, 0x0a, 0x0c, 0x44,
+ 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x44,
+ 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x5f, 0x53, 0x54, 0x59, 0x4c, 0x45, 0x5f, 0x55, 0x4e, 0x53,
+ 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x45,
+ 0x45, 0x4b, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10,
+ 0x02, 0x22, 0x8f, 0x07, 0x0a, 0x06, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x12, 0x4b, 0x0a, 0x0e,
+ 0x74, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70,
+ 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x50,
+ 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x65, 0x78, 0x74,
+ 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6d, 0x61,
+ 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49,
+ 0x6d, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x4b, 0x0a,
+ 0x0e, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+ 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6f,
+ 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x63,
+ 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x62, 0x75,
+ 0x74, 0x74, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61,
+ 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74,
+ 0x48, 0x00, 0x52, 0x0a, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3f,
+ 0x0a, 0x0a, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+ 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70,
+ 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12,
+ 0x4e, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x70,
+ 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52,
+ 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12,
+ 0x4f, 0x0a, 0x10, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x69, 0x63,
+ 0x6b, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e,
+ 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x48, 0x00,
+ 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72,
+ 0x12, 0x38, 0x0a, 0x07, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e,
+ 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48,
+ 0x00, 0x52, 0x07, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x04, 0x67, 0x72,
+ 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47,
+ 0x72, 0x69, 0x64, 0x48, 0x00, 0x52, 0x04, 0x67, 0x72, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x07, 0x63,
+ 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67,
+ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e,
+ 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f,
+ 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x14, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e,
+ 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20,
+ 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70,
+ 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74,
+ 0x2e, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e,
+ 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x13, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c,
+ 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x23, 0x0a, 0x09, 0x49, 0x6d, 0x61,
+ 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x51, 0x55, 0x41, 0x52, 0x45,
+ 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x10, 0x01, 0x22, 0x5b,
+ 0x0a, 0x13, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67,
+ 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x20, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e,
+ 0x54, 0x41, 0x4c, 0x5f, 0x41, 0x4c, 0x49, 0x47, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e,
+ 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53,
+ 0x54, 0x41, 0x52, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x45, 0x4e, 0x54, 0x45, 0x52,
+ 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x4e, 0x44, 0x10, 0x03, 0x42, 0x06, 0x0a, 0x04, 0x64,
+ 0x61, 0x74, 0x61, 0x22, 0x23, 0x0a, 0x0d, 0x54, 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x61, 0x67,
+ 0x72, 0x61, 0x70, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67,
+ 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x37,
+ 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63,
+ 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x52, 0x07,
+ 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74,
+ 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65,
+ 0x78, 0x74, 0x22, 0x09, 0x0a, 0x07, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0xb3, 0x06,
+ 0x0a, 0x0d, 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x12,
+ 0x31, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64,
+ 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x63, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x69, 0x63,
+ 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x63, 0x6f, 0x6e,
+ 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x63, 0x6f,
+ 0x6e, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x63, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09,
+ 0x74, 0x6f, 0x70, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x08, 0x74, 0x6f, 0x70, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78,
+ 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1b, 0x0a,
+ 0x09, 0x77, 0x72, 0x61, 0x70, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08,
+ 0x52, 0x08, 0x77, 0x72, 0x61, 0x70, 0x54, 0x65, 0x78, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6f,
+ 0x74, 0x74, 0x6f, 0x6d, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0b, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x37, 0x0a,
+ 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61,
+ 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x52, 0x07, 0x6f,
+ 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x35, 0x0a, 0x06, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e,
+ 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74,
+ 0x74, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x59, 0x0a,
+ 0x0e, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18,
+ 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+ 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6f,
+ 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68,
+ 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x77, 0x69, 0x74, 0x63,
+ 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f,
+ 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31,
+ 0x2e, 0x49, 0x63, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x49, 0x63, 0x6f, 0x6e,
+ 0x1a, 0xb5, 0x02, 0x0a, 0x0d, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72,
+ 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08,
+ 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08,
+ 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, 0x5f, 0x63,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+ 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x0e, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x5f, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+ 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6f,
+ 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68,
+ 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x54,
+ 0x79, 0x70, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65,
+ 0x22, 0x36, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12,
+ 0x0a, 0x0a, 0x06, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43,
+ 0x48, 0x45, 0x43, 0x4b, 0x42, 0x4f, 0x58, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x48, 0x45,
+ 0x43, 0x4b, 0x5f, 0x42, 0x4f, 0x58, 0x10, 0x02, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74,
+ 0x72, 0x6f, 0x6c, 0x22, 0xe1, 0x03, 0x0a, 0x09, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75,
+ 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x68,
+ 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+ 0x68, 0x69, 0x6e, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37,
+ 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67,
+ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e,
+ 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x79, 0x70,
+ 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, 0x5f, 0x63, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e,
+ 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e,
+ 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51,
+ 0x0a, 0x13, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76,
+ 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x69,
+ 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x12, 0x4d, 0x0a, 0x14, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
+ 0x74, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61,
+ 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x61, 0x75,
+ 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f,
+ 0x74, 0x65, 0x78, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x63,
+ 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0x2a, 0x0a, 0x04, 0x54,
+ 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x4c, 0x49,
+ 0x4e, 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45,
+ 0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x22, 0x87, 0x01, 0x0a, 0x0b, 0x53, 0x75, 0x67, 0x67,
+ 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x45, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x67,
+ 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74,
+ 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x31,
+ 0x0a, 0x0e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d,
+ 0x12, 0x14, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
+ 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x22, 0x43, 0x0a, 0x0a, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12,
+ 0x35, 0x0a, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63,
+ 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x07, 0x62,
+ 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x22, 0xb9, 0x08, 0x0a, 0x0e, 0x53, 0x65, 0x6c, 0x65, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
+ 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a,
+ 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x12, 0x45, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e,
+ 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x47, 0x0a, 0x05, 0x69, 0x74,
+ 0x65, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e,
+ 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x53,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74,
+ 0x65, 0x6d, 0x73, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
+ 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64,
+ 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x6e, 0x43, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x1f, 0x6d, 0x75,
+ 0x6c, 0x74, 0x69, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x73,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x06, 0x20,
+ 0x01, 0x28, 0x05, 0x52, 0x1b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x4d, 0x61, 0x78, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73,
+ 0x12, 0x40, 0x0a, 0x1d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74,
+ 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65,
+ 0x6c, 0x65, 0x63, 0x74, 0x4d, 0x69, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x6e, 0x67,
+ 0x74, 0x68, 0x12, 0x4f, 0x0a, 0x14, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64,
+ 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63,
+ 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52,
+ 0x12, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x14, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f,
+ 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e,
+ 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44,
+ 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x12, 0x70, 0x6c, 0x61,
+ 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a,
+ 0x9c, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65,
+ 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74,
+ 0x5f, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x69, 0x12, 0x1f, 0x0a,
+ 0x0b, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0a, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x54, 0x65, 0x78, 0x74, 0x1a, 0xc7,
+ 0x01, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x53,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x77, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f,
+ 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e,
+ 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44,
+ 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+ 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x10, 0x63, 0x6f,
+ 0x6d, 0x6d, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x29,
+ 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12,
+ 0x08, 0x0a, 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x64, 0x61, 0x74,
+ 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x5c, 0x0a, 0x0d, 0x53, 0x65, 0x6c, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x48, 0x45,
+ 0x43, 0x4b, 0x5f, 0x42, 0x4f, 0x58, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x41, 0x44, 0x49,
+ 0x4f, 0x5f, 0x42, 0x55, 0x54, 0x54, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x57,
+ 0x49, 0x54, 0x43, 0x48, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x52, 0x4f, 0x50, 0x44, 0x4f,
+ 0x57, 0x4e, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x53, 0x45,
+ 0x4c, 0x45, 0x43, 0x54, 0x10, 0x04, 0x42, 0x1a, 0x0a, 0x18, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f,
+ 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x22, 0xec, 0x02, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50,
+ 0x69, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12,
+ 0x4a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64,
+ 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b,
+ 0x65, 0x72, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65,
+ 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x73, 0x45, 0x70, 0x6f, 0x63,
+ 0x68, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x5f, 0x6f, 0x66,
+ 0x66, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52,
+ 0x12, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x44,
+ 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
+ 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64,
+ 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x6e, 0x43, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x45, 0x0a, 0x12, 0x44, 0x61,
+ 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65,
+ 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x54, 0x49, 0x4d,
+ 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59,
+ 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10,
+ 0x02, 0x22, 0xe5, 0x01, 0x0a, 0x06, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04,
+ 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74,
+ 0x12, 0x2d, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
+ 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72,
+ 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x63, 0x6f, 0x6e, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12,
+ 0x28, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
+ 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x43, 0x6f, 0x6c,
+ 0x6f, 0x72, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x37, 0x0a, 0x08, 0x6f, 0x6e, 0x5f,
+ 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76,
+ 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x52, 0x07, 0x6f, 0x6e, 0x43, 0x6c, 0x69,
+ 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x19,
+ 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x22, 0xf8, 0x01, 0x0a, 0x04, 0x49, 0x63,
+ 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0a, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x69, 0x63, 0x6f, 0x6e,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x49,
+ 0x63, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x08, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c,
+ 0x12, 0x48, 0x0a, 0x0d, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x63, 0x6f,
+ 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61,
+ 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x63, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6d, 0x61,
+ 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x63, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c,
+ 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c,
+ 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x44, 0x0a, 0x0a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x74,
+ 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e,
+ 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65,
+ 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x69,
+ 0x63, 0x6f, 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x0c, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c,
+ 0x49, 0x63, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x6c,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x6c, 0x12, 0x16, 0x0a, 0x06,
+ 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x05, 0x52, 0x05, 0x67, 0x72, 0x61, 0x64, 0x65, 0x22, 0xed, 0x01, 0x0a, 0x0e, 0x49,
+ 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x45, 0x0a,
+ 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76,
+ 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x53, 0x74, 0x79, 0x6c, 0x65,
+ 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04,
+ 0x74, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x61, 0x73, 0x70, 0x65,
+ 0x63, 0x74, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x22, 0x71, 0x0a, 0x0d, 0x49, 0x6d, 0x61, 0x67, 0x65,
+ 0x43, 0x72, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4d, 0x41, 0x47,
+ 0x45, 0x5f, 0x43, 0x52, 0x4f, 0x50, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50,
+ 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x51, 0x55,
+ 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x10,
+ 0x02, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, 0x43, 0x54, 0x41, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x43,
+ 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x45, 0x43, 0x54, 0x41,
+ 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x34, 0x5f, 0x33, 0x10, 0x04, 0x22, 0xf0, 0x01, 0x0a, 0x0b, 0x42,
+ 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x04, 0x74, 0x79,
+ 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42,
+ 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x42, 0x6f, 0x72, 0x64, 0x65,
+ 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x35, 0x0a, 0x0c, 0x73,
+ 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e,
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x43, 0x6f, 0x6c,
+ 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x72, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x61, 0x64,
+ 0x69, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x6f, 0x72, 0x6e, 0x65,
+ 0x72, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x22, 0x44, 0x0a, 0x0a, 0x42, 0x6f, 0x72, 0x64, 0x65,
+ 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x42, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f,
+ 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
+ 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x42, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x10,
+ 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x4f, 0x4b, 0x45, 0x10, 0x02, 0x22, 0xd1, 0x01,
+ 0x0a, 0x0e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74,
+ 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x69, 0x12, 0x19, 0x0a,
+ 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x72, 0x6f, 0x70,
+ 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67,
+ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e,
+ 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x53, 0x74, 0x79, 0x6c,
+ 0x65, 0x52, 0x09, 0x63, 0x72, 0x6f, 0x70, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x43, 0x0a, 0x0c,
+ 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+ 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53,
+ 0x74, 0x79, 0x6c, 0x65, 0x52, 0x0b, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c,
+ 0x65, 0x22, 0xa0, 0x04, 0x0a, 0x04, 0x47, 0x72, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69,
+ 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61,
+ 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x49,
+ 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x43, 0x0a, 0x0c, 0x62, 0x6f,
+ 0x72, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63,
+ 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79,
+ 0x6c, 0x65, 0x52, 0x0b, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12,
+ 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x43, 0x6f, 0x75,
+ 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x05,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70,
+ 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69,
+ 0x63, 0x6b, 0x52, 0x07, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x1a, 0xa6, 0x02, 0x0a, 0x08,
+ 0x47, 0x72, 0x69, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d,
+ 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x69, 0x6d,
+ 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, 0x62,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18,
+ 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+ 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x69, 0x64,
+ 0x2e, 0x47, 0x72, 0x69, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x49, 0x74,
+ 0x65, 0x6d, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74,
+ 0x22, 0x52, 0x0a, 0x0e, 0x47, 0x72, 0x69, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x4c, 0x61, 0x79, 0x6f,
+ 0x75, 0x74, 0x12, 0x20, 0x0a, 0x1c, 0x47, 0x52, 0x49, 0x44, 0x5f, 0x49, 0x54, 0x45, 0x4d, 0x5f,
+ 0x4c, 0x41, 0x59, 0x4f, 0x55, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
+ 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x42, 0x45, 0x4c,
+ 0x4f, 0x57, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x41, 0x42, 0x4f,
+ 0x56, 0x45, 0x10, 0x02, 0x22, 0xac, 0x09, 0x0a, 0x07, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
+ 0x12, 0x46, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73,
+ 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c,
+ 0x75, 0x6d, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x0b, 0x63, 0x6f, 0x6c,
+ 0x75, 0x6d, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0xd8, 0x08, 0x0a, 0x06, 0x43, 0x6f, 0x6c,
+ 0x75, 0x6d, 0x6e, 0x12, 0x6b, 0x0a, 0x15, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61,
+ 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+ 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
+ 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x2e, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74,
+ 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x13, 0x68, 0x6f, 0x72,
+ 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x74, 0x79, 0x6c, 0x65,
+ 0x12, 0x62, 0x0a, 0x14, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f,
+ 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72,
+ 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x48, 0x6f, 0x72, 0x69,
+ 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52,
+ 0x13, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e,
+ 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x64, 0x0a, 0x12, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c,
+ 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e,
+ 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63,
+ 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2e, 0x43,
+ 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x2e, 0x56, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x41, 0x6c,
+ 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x11, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61,
+ 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x07, 0x77, 0x69,
+ 0x64, 0x67, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76,
+ 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+ 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x52, 0x07, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74,
+ 0x73, 0x1a, 0x85, 0x04, 0x0a, 0x07, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x12, 0x4b, 0x0a,
+ 0x0e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+ 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74,
+ 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x65, 0x78,
+ 0x74, 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6d,
+ 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e,
+ 0x49, 0x6d, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x4b,
+ 0x0a, 0x0e, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63,
+ 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65,
+ 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x62,
+ 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63,
+ 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73,
+ 0x74, 0x48, 0x00, 0x52, 0x0a, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12,
+ 0x3f, 0x0a, 0x0a, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x05, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70,
+ 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e,
+ 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74,
+ 0x12, 0x4e, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e,
+ 0x70, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e,
+ 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x48, 0x00,
+ 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74,
+ 0x12, 0x4f, 0x0a, 0x10, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x69,
+ 0x63, 0x6b, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31,
+ 0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x48,
+ 0x00, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65,
+ 0x72, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6e, 0x0a, 0x13, 0x48, 0x6f, 0x72,
+ 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x74, 0x79, 0x6c, 0x65,
+ 0x12, 0x25, 0x0a, 0x21, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x53,
+ 0x49, 0x5a, 0x45, 0x5f, 0x53, 0x54, 0x59, 0x4c, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
+ 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x49, 0x4c, 0x4c, 0x5f,
+ 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10,
+ 0x01, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x49, 0x4c, 0x4c, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x4d, 0x55,
+ 0x4d, 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x02, 0x22, 0x58, 0x0a, 0x11, 0x56, 0x65, 0x72,
+ 0x74, 0x69, 0x63, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x22,
+ 0x0a, 0x1e, 0x56, 0x45, 0x52, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x5f, 0x41, 0x4c, 0x49, 0x47, 0x4e,
+ 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
+ 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x07,
+ 0x0a, 0x03, 0x54, 0x4f, 0x50, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x4f, 0x54, 0x54, 0x4f,
+ 0x4d, 0x10, 0x03, 0x22, 0x8f, 0x02, 0x0a, 0x07, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12,
+ 0x35, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61,
+ 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x6c,
+ 0x69, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e,
+ 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e,
+ 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x56, 0x0a, 0x18, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x64, 0x79, 0x6e,
+ 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x15, 0x6f, 0x70, 0x65, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d,
+ 0x69, 0x63, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x04,
+ 0x63, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31,
+ 0x2e, 0x43, 0x61, 0x72, 0x64, 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x42, 0x06, 0x0a,
+ 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe7, 0x01, 0x0a, 0x08, 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x69,
+ 0x6e, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x75, 0x72, 0x6c, 0x12, 0x3d, 0x0a, 0x07, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x61, 0x73, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+ 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+ 0x4c, 0x69, 0x6e, 0x6b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x73, 0x52, 0x06, 0x6f, 0x70, 0x65,
+ 0x6e, 0x41, 0x73, 0x12, 0x40, 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+ 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+ 0x4c, 0x69, 0x6e, 0x6b, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x07, 0x6f, 0x6e,
+ 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x22, 0x24, 0x0a, 0x06, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x73, 0x12,
+ 0x0d, 0x0a, 0x09, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x00, 0x12, 0x0b,
+ 0x0a, 0x07, 0x4f, 0x56, 0x45, 0x52, 0x4c, 0x41, 0x59, 0x10, 0x01, 0x22, 0x22, 0x0a, 0x07, 0x4f,
+ 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x4f, 0x54, 0x48, 0x49, 0x4e,
+ 0x47, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x01, 0x22,
+ 0xd5, 0x03, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
+ 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31,
+ 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61,
+ 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+ 0x65, 0x72, 0x73, 0x12, 0x50, 0x0a, 0x0e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x69,
+ 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76,
+ 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x64,
+ 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69,
+ 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74,
+ 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x70,
+ 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x0b,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e,
+ 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49,
+ 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65,
+ 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
+ 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0d, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61,
+ 0x74, 0x6f, 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x50, 0x49, 0x4e, 0x4e, 0x45, 0x52, 0x10, 0x00,
+ 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x22, 0x3b, 0x0a, 0x0b, 0x49, 0x6e,
+ 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x54,
+ 0x45, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
+ 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x44,
+ 0x49, 0x41, 0x4c, 0x4f, 0x47, 0x10, 0x01, 0x42, 0xa4, 0x01, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64,
+ 0x2e, 0x76, 0x31, 0x42, 0x09, 0x43, 0x61, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
+ 0x5a, 0x37, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x63, 0x61, 0x72,
+ 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x61, 0x72, 0x64, 0xaa, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x73, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x56, 0x31, 0xca,
+ 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x41, 0x70, 0x70, 0x73, 0x5c, 0x43, 0x61,
+ 0x72, 0x64, 0x5c, 0x56, 0x31, 0xea, 0x02, 0x16, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a,
+ 0x41, 0x70, 0x70, 0x73, 0x3a, 0x3a, 0x43, 0x61, 0x72, 0x64, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_google_apps_card_v1_card_proto_rawDescOnce sync.Once
+ file_google_apps_card_v1_card_proto_rawDescData = file_google_apps_card_v1_card_proto_rawDesc
+)
+
+func file_google_apps_card_v1_card_proto_rawDescGZIP() []byte {
+ file_google_apps_card_v1_card_proto_rawDescOnce.Do(func() {
+ file_google_apps_card_v1_card_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_apps_card_v1_card_proto_rawDescData)
+ })
+ return file_google_apps_card_v1_card_proto_rawDescData
+}
+
+var file_google_apps_card_v1_card_proto_enumTypes = make([]protoimpl.EnumInfo, 18)
+var file_google_apps_card_v1_card_proto_msgTypes = make([]protoimpl.MessageInfo, 34)
+var file_google_apps_card_v1_card_proto_goTypes = []interface{}{
+ (Card_DividerStyle)(0), // 0: google.apps.card.v1.Card.DividerStyle
+ (Card_DisplayStyle)(0), // 1: google.apps.card.v1.Card.DisplayStyle
+ (Widget_ImageType)(0), // 2: google.apps.card.v1.Widget.ImageType
+ (Widget_HorizontalAlignment)(0), // 3: google.apps.card.v1.Widget.HorizontalAlignment
+ (DecoratedText_SwitchControl_ControlType)(0), // 4: google.apps.card.v1.DecoratedText.SwitchControl.ControlType
+ (TextInput_Type)(0), // 5: google.apps.card.v1.TextInput.Type
+ (SelectionInput_SelectionType)(0), // 6: google.apps.card.v1.SelectionInput.SelectionType
+ (SelectionInput_PlatformDataSource_CommonDataSource)(0), // 7: google.apps.card.v1.SelectionInput.PlatformDataSource.CommonDataSource
+ (DateTimePicker_DateTimePickerType)(0), // 8: google.apps.card.v1.DateTimePicker.DateTimePickerType
+ (ImageCropStyle_ImageCropType)(0), // 9: google.apps.card.v1.ImageCropStyle.ImageCropType
+ (BorderStyle_BorderType)(0), // 10: google.apps.card.v1.BorderStyle.BorderType
+ (Grid_GridItem_GridItemLayout)(0), // 11: google.apps.card.v1.Grid.GridItem.GridItemLayout
+ (Columns_Column_HorizontalSizeStyle)(0), // 12: google.apps.card.v1.Columns.Column.HorizontalSizeStyle
+ (Columns_Column_VerticalAlignment)(0), // 13: google.apps.card.v1.Columns.Column.VerticalAlignment
+ (OpenLink_OpenAs)(0), // 14: google.apps.card.v1.OpenLink.OpenAs
+ (OpenLink_OnClose)(0), // 15: google.apps.card.v1.OpenLink.OnClose
+ (Action_LoadIndicator)(0), // 16: google.apps.card.v1.Action.LoadIndicator
+ (Action_Interaction)(0), // 17: google.apps.card.v1.Action.Interaction
+ (*Card)(nil), // 18: google.apps.card.v1.Card
+ (*Widget)(nil), // 19: google.apps.card.v1.Widget
+ (*TextParagraph)(nil), // 20: google.apps.card.v1.TextParagraph
+ (*Image)(nil), // 21: google.apps.card.v1.Image
+ (*Divider)(nil), // 22: google.apps.card.v1.Divider
+ (*DecoratedText)(nil), // 23: google.apps.card.v1.DecoratedText
+ (*TextInput)(nil), // 24: google.apps.card.v1.TextInput
+ (*Suggestions)(nil), // 25: google.apps.card.v1.Suggestions
+ (*ButtonList)(nil), // 26: google.apps.card.v1.ButtonList
+ (*SelectionInput)(nil), // 27: google.apps.card.v1.SelectionInput
+ (*DateTimePicker)(nil), // 28: google.apps.card.v1.DateTimePicker
+ (*Button)(nil), // 29: google.apps.card.v1.Button
+ (*Icon)(nil), // 30: google.apps.card.v1.Icon
+ (*MaterialIcon)(nil), // 31: google.apps.card.v1.MaterialIcon
+ (*ImageCropStyle)(nil), // 32: google.apps.card.v1.ImageCropStyle
+ (*BorderStyle)(nil), // 33: google.apps.card.v1.BorderStyle
+ (*ImageComponent)(nil), // 34: google.apps.card.v1.ImageComponent
+ (*Grid)(nil), // 35: google.apps.card.v1.Grid
+ (*Columns)(nil), // 36: google.apps.card.v1.Columns
+ (*OnClick)(nil), // 37: google.apps.card.v1.OnClick
+ (*OpenLink)(nil), // 38: google.apps.card.v1.OpenLink
+ (*Action)(nil), // 39: google.apps.card.v1.Action
+ (*Card_CardHeader)(nil), // 40: google.apps.card.v1.Card.CardHeader
+ (*Card_Section)(nil), // 41: google.apps.card.v1.Card.Section
+ (*Card_CardAction)(nil), // 42: google.apps.card.v1.Card.CardAction
+ (*Card_CardFixedFooter)(nil), // 43: google.apps.card.v1.Card.CardFixedFooter
+ (*DecoratedText_SwitchControl)(nil), // 44: google.apps.card.v1.DecoratedText.SwitchControl
+ (*Suggestions_SuggestionItem)(nil), // 45: google.apps.card.v1.Suggestions.SuggestionItem
+ (*SelectionInput_SelectionItem)(nil), // 46: google.apps.card.v1.SelectionInput.SelectionItem
+ (*SelectionInput_PlatformDataSource)(nil), // 47: google.apps.card.v1.SelectionInput.PlatformDataSource
+ (*Grid_GridItem)(nil), // 48: google.apps.card.v1.Grid.GridItem
+ (*Columns_Column)(nil), // 49: google.apps.card.v1.Columns.Column
+ (*Columns_Column_Widgets)(nil), // 50: google.apps.card.v1.Columns.Column.Widgets
+ (*Action_ActionParameter)(nil), // 51: google.apps.card.v1.Action.ActionParameter
+ (*color.Color)(nil), // 52: google.type.Color
+}
+var file_google_apps_card_v1_card_proto_depIdxs = []int32{
+ 40, // 0: google.apps.card.v1.Card.header:type_name -> google.apps.card.v1.Card.CardHeader
+ 41, // 1: google.apps.card.v1.Card.sections:type_name -> google.apps.card.v1.Card.Section
+ 0, // 2: google.apps.card.v1.Card.section_divider_style:type_name -> google.apps.card.v1.Card.DividerStyle
+ 42, // 3: google.apps.card.v1.Card.card_actions:type_name -> google.apps.card.v1.Card.CardAction
+ 43, // 4: google.apps.card.v1.Card.fixed_footer:type_name -> google.apps.card.v1.Card.CardFixedFooter
+ 1, // 5: google.apps.card.v1.Card.display_style:type_name -> google.apps.card.v1.Card.DisplayStyle
+ 40, // 6: google.apps.card.v1.Card.peek_card_header:type_name -> google.apps.card.v1.Card.CardHeader
+ 20, // 7: google.apps.card.v1.Widget.text_paragraph:type_name -> google.apps.card.v1.TextParagraph
+ 21, // 8: google.apps.card.v1.Widget.image:type_name -> google.apps.card.v1.Image
+ 23, // 9: google.apps.card.v1.Widget.decorated_text:type_name -> google.apps.card.v1.DecoratedText
+ 26, // 10: google.apps.card.v1.Widget.button_list:type_name -> google.apps.card.v1.ButtonList
+ 24, // 11: google.apps.card.v1.Widget.text_input:type_name -> google.apps.card.v1.TextInput
+ 27, // 12: google.apps.card.v1.Widget.selection_input:type_name -> google.apps.card.v1.SelectionInput
+ 28, // 13: google.apps.card.v1.Widget.date_time_picker:type_name -> google.apps.card.v1.DateTimePicker
+ 22, // 14: google.apps.card.v1.Widget.divider:type_name -> google.apps.card.v1.Divider
+ 35, // 15: google.apps.card.v1.Widget.grid:type_name -> google.apps.card.v1.Grid
+ 36, // 16: google.apps.card.v1.Widget.columns:type_name -> google.apps.card.v1.Columns
+ 3, // 17: google.apps.card.v1.Widget.horizontal_alignment:type_name -> google.apps.card.v1.Widget.HorizontalAlignment
+ 37, // 18: google.apps.card.v1.Image.on_click:type_name -> google.apps.card.v1.OnClick
+ 30, // 19: google.apps.card.v1.DecoratedText.icon:type_name -> google.apps.card.v1.Icon
+ 30, // 20: google.apps.card.v1.DecoratedText.start_icon:type_name -> google.apps.card.v1.Icon
+ 37, // 21: google.apps.card.v1.DecoratedText.on_click:type_name -> google.apps.card.v1.OnClick
+ 29, // 22: google.apps.card.v1.DecoratedText.button:type_name -> google.apps.card.v1.Button
+ 44, // 23: google.apps.card.v1.DecoratedText.switch_control:type_name -> google.apps.card.v1.DecoratedText.SwitchControl
+ 30, // 24: google.apps.card.v1.DecoratedText.end_icon:type_name -> google.apps.card.v1.Icon
+ 5, // 25: google.apps.card.v1.TextInput.type:type_name -> google.apps.card.v1.TextInput.Type
+ 39, // 26: google.apps.card.v1.TextInput.on_change_action:type_name -> google.apps.card.v1.Action
+ 25, // 27: google.apps.card.v1.TextInput.initial_suggestions:type_name -> google.apps.card.v1.Suggestions
+ 39, // 28: google.apps.card.v1.TextInput.auto_complete_action:type_name -> google.apps.card.v1.Action
+ 45, // 29: google.apps.card.v1.Suggestions.items:type_name -> google.apps.card.v1.Suggestions.SuggestionItem
+ 29, // 30: google.apps.card.v1.ButtonList.buttons:type_name -> google.apps.card.v1.Button
+ 6, // 31: google.apps.card.v1.SelectionInput.type:type_name -> google.apps.card.v1.SelectionInput.SelectionType
+ 46, // 32: google.apps.card.v1.SelectionInput.items:type_name -> google.apps.card.v1.SelectionInput.SelectionItem
+ 39, // 33: google.apps.card.v1.SelectionInput.on_change_action:type_name -> google.apps.card.v1.Action
+ 39, // 34: google.apps.card.v1.SelectionInput.external_data_source:type_name -> google.apps.card.v1.Action
+ 47, // 35: google.apps.card.v1.SelectionInput.platform_data_source:type_name -> google.apps.card.v1.SelectionInput.PlatformDataSource
+ 8, // 36: google.apps.card.v1.DateTimePicker.type:type_name -> google.apps.card.v1.DateTimePicker.DateTimePickerType
+ 39, // 37: google.apps.card.v1.DateTimePicker.on_change_action:type_name -> google.apps.card.v1.Action
+ 30, // 38: google.apps.card.v1.Button.icon:type_name -> google.apps.card.v1.Icon
+ 52, // 39: google.apps.card.v1.Button.color:type_name -> google.type.Color
+ 37, // 40: google.apps.card.v1.Button.on_click:type_name -> google.apps.card.v1.OnClick
+ 31, // 41: google.apps.card.v1.Icon.material_icon:type_name -> google.apps.card.v1.MaterialIcon
+ 2, // 42: google.apps.card.v1.Icon.image_type:type_name -> google.apps.card.v1.Widget.ImageType
+ 9, // 43: google.apps.card.v1.ImageCropStyle.type:type_name -> google.apps.card.v1.ImageCropStyle.ImageCropType
+ 10, // 44: google.apps.card.v1.BorderStyle.type:type_name -> google.apps.card.v1.BorderStyle.BorderType
+ 52, // 45: google.apps.card.v1.BorderStyle.stroke_color:type_name -> google.type.Color
+ 32, // 46: google.apps.card.v1.ImageComponent.crop_style:type_name -> google.apps.card.v1.ImageCropStyle
+ 33, // 47: google.apps.card.v1.ImageComponent.border_style:type_name -> google.apps.card.v1.BorderStyle
+ 48, // 48: google.apps.card.v1.Grid.items:type_name -> google.apps.card.v1.Grid.GridItem
+ 33, // 49: google.apps.card.v1.Grid.border_style:type_name -> google.apps.card.v1.BorderStyle
+ 37, // 50: google.apps.card.v1.Grid.on_click:type_name -> google.apps.card.v1.OnClick
+ 49, // 51: google.apps.card.v1.Columns.column_items:type_name -> google.apps.card.v1.Columns.Column
+ 39, // 52: google.apps.card.v1.OnClick.action:type_name -> google.apps.card.v1.Action
+ 38, // 53: google.apps.card.v1.OnClick.open_link:type_name -> google.apps.card.v1.OpenLink
+ 39, // 54: google.apps.card.v1.OnClick.open_dynamic_link_action:type_name -> google.apps.card.v1.Action
+ 18, // 55: google.apps.card.v1.OnClick.card:type_name -> google.apps.card.v1.Card
+ 14, // 56: google.apps.card.v1.OpenLink.open_as:type_name -> google.apps.card.v1.OpenLink.OpenAs
+ 15, // 57: google.apps.card.v1.OpenLink.on_close:type_name -> google.apps.card.v1.OpenLink.OnClose
+ 51, // 58: google.apps.card.v1.Action.parameters:type_name -> google.apps.card.v1.Action.ActionParameter
+ 16, // 59: google.apps.card.v1.Action.load_indicator:type_name -> google.apps.card.v1.Action.LoadIndicator
+ 17, // 60: google.apps.card.v1.Action.interaction:type_name -> google.apps.card.v1.Action.Interaction
+ 2, // 61: google.apps.card.v1.Card.CardHeader.image_type:type_name -> google.apps.card.v1.Widget.ImageType
+ 19, // 62: google.apps.card.v1.Card.Section.widgets:type_name -> google.apps.card.v1.Widget
+ 37, // 63: google.apps.card.v1.Card.CardAction.on_click:type_name -> google.apps.card.v1.OnClick
+ 29, // 64: google.apps.card.v1.Card.CardFixedFooter.primary_button:type_name -> google.apps.card.v1.Button
+ 29, // 65: google.apps.card.v1.Card.CardFixedFooter.secondary_button:type_name -> google.apps.card.v1.Button
+ 39, // 66: google.apps.card.v1.DecoratedText.SwitchControl.on_change_action:type_name -> google.apps.card.v1.Action
+ 4, // 67: google.apps.card.v1.DecoratedText.SwitchControl.control_type:type_name -> google.apps.card.v1.DecoratedText.SwitchControl.ControlType
+ 7, // 68: google.apps.card.v1.SelectionInput.PlatformDataSource.common_data_source:type_name -> google.apps.card.v1.SelectionInput.PlatformDataSource.CommonDataSource
+ 34, // 69: google.apps.card.v1.Grid.GridItem.image:type_name -> google.apps.card.v1.ImageComponent
+ 11, // 70: google.apps.card.v1.Grid.GridItem.layout:type_name -> google.apps.card.v1.Grid.GridItem.GridItemLayout
+ 12, // 71: google.apps.card.v1.Columns.Column.horizontal_size_style:type_name -> google.apps.card.v1.Columns.Column.HorizontalSizeStyle
+ 3, // 72: google.apps.card.v1.Columns.Column.horizontal_alignment:type_name -> google.apps.card.v1.Widget.HorizontalAlignment
+ 13, // 73: google.apps.card.v1.Columns.Column.vertical_alignment:type_name -> google.apps.card.v1.Columns.Column.VerticalAlignment
+ 50, // 74: google.apps.card.v1.Columns.Column.widgets:type_name -> google.apps.card.v1.Columns.Column.Widgets
+ 20, // 75: google.apps.card.v1.Columns.Column.Widgets.text_paragraph:type_name -> google.apps.card.v1.TextParagraph
+ 21, // 76: google.apps.card.v1.Columns.Column.Widgets.image:type_name -> google.apps.card.v1.Image
+ 23, // 77: google.apps.card.v1.Columns.Column.Widgets.decorated_text:type_name -> google.apps.card.v1.DecoratedText
+ 26, // 78: google.apps.card.v1.Columns.Column.Widgets.button_list:type_name -> google.apps.card.v1.ButtonList
+ 24, // 79: google.apps.card.v1.Columns.Column.Widgets.text_input:type_name -> google.apps.card.v1.TextInput
+ 27, // 80: google.apps.card.v1.Columns.Column.Widgets.selection_input:type_name -> google.apps.card.v1.SelectionInput
+ 28, // 81: google.apps.card.v1.Columns.Column.Widgets.date_time_picker:type_name -> google.apps.card.v1.DateTimePicker
+ 82, // [82:82] is the sub-list for method output_type
+ 82, // [82:82] is the sub-list for method input_type
+ 82, // [82:82] is the sub-list for extension type_name
+ 82, // [82:82] is the sub-list for extension extendee
+ 0, // [0:82] is the sub-list for field type_name
+}
+
+func init() { file_google_apps_card_v1_card_proto_init() }
+func file_google_apps_card_v1_card_proto_init() {
+ if File_google_apps_card_v1_card_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_google_apps_card_v1_card_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Card); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Widget); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*TextParagraph); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Image); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Divider); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DecoratedText); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*TextInput); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Suggestions); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ButtonList); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SelectionInput); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DateTimePicker); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Button); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Icon); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MaterialIcon); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ImageCropStyle); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*BorderStyle); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ImageComponent); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Grid); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Columns); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*OnClick); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*OpenLink); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Action); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Card_CardHeader); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Card_Section); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Card_CardAction); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Card_CardFixedFooter); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DecoratedText_SwitchControl); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Suggestions_SuggestionItem); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SelectionInput_SelectionItem); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SelectionInput_PlatformDataSource); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Grid_GridItem); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Columns_Column); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Columns_Column_Widgets); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Action_ActionParameter); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[1].OneofWrappers = []interface{}{
+ (*Widget_TextParagraph)(nil),
+ (*Widget_Image)(nil),
+ (*Widget_DecoratedText)(nil),
+ (*Widget_ButtonList)(nil),
+ (*Widget_TextInput)(nil),
+ (*Widget_SelectionInput)(nil),
+ (*Widget_DateTimePicker)(nil),
+ (*Widget_Divider)(nil),
+ (*Widget_Grid)(nil),
+ (*Widget_Columns)(nil),
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[5].OneofWrappers = []interface{}{
+ (*DecoratedText_Button)(nil),
+ (*DecoratedText_SwitchControl_)(nil),
+ (*DecoratedText_EndIcon)(nil),
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[9].OneofWrappers = []interface{}{
+ (*SelectionInput_ExternalDataSource)(nil),
+ (*SelectionInput_PlatformDataSource_)(nil),
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[12].OneofWrappers = []interface{}{
+ (*Icon_KnownIcon)(nil),
+ (*Icon_IconUrl)(nil),
+ (*Icon_MaterialIcon)(nil),
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[19].OneofWrappers = []interface{}{
+ (*OnClick_Action)(nil),
+ (*OnClick_OpenLink)(nil),
+ (*OnClick_OpenDynamicLinkAction)(nil),
+ (*OnClick_Card)(nil),
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[27].OneofWrappers = []interface{}{
+ (*Suggestions_SuggestionItem_Text)(nil),
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[29].OneofWrappers = []interface{}{
+ (*SelectionInput_PlatformDataSource_CommonDataSource_)(nil),
+ }
+ file_google_apps_card_v1_card_proto_msgTypes[32].OneofWrappers = []interface{}{
+ (*Columns_Column_Widgets_TextParagraph)(nil),
+ (*Columns_Column_Widgets_Image)(nil),
+ (*Columns_Column_Widgets_DecoratedText)(nil),
+ (*Columns_Column_Widgets_ButtonList)(nil),
+ (*Columns_Column_Widgets_TextInput)(nil),
+ (*Columns_Column_Widgets_SelectionInput)(nil),
+ (*Columns_Column_Widgets_DateTimePicker)(nil),
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_google_apps_card_v1_card_proto_rawDesc,
+ NumEnums: 18,
+ NumMessages: 34,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_google_apps_card_v1_card_proto_goTypes,
+ DependencyIndexes: file_google_apps_card_v1_card_proto_depIdxs,
+ EnumInfos: file_google_apps_card_v1_card_proto_enumTypes,
+ MessageInfos: file_google_apps_card_v1_card_proto_msgTypes,
+ }.Build()
+ File_google_apps_card_v1_card_proto = out.File
+ file_google_apps_card_v1_card_proto_rawDesc = nil
+ file_google_apps_card_v1_card_proto_goTypes = nil
+ file_google_apps_card_v1_card_proto_depIdxs = nil
+}
diff --git a/regen.txt b/regen.txt
index 631a229..8b5940d 100644
--- a/regen.txt
+++ b/regen.txt
@@ -1 +1 @@
-1cbeafa1527735b8c0cec1112be169b146892c48
\ No newline at end of file
+436a34a5da04978e98859afe7487ce93d08e9c03
\ No newline at end of file