blob: 81f785a0bb4ea7d91cf6a43c4161971459b1efaa [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
//! Presentation of the original readonly native touch selection.
use crate::appearance::MenuAppearance;
use maka_plugin_core::contract::{Contract, Interface, Transport};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct SelectionMenuProps {
pub appearance: MenuAppearance,
pub labels: SelectionMenuLabels,
pub disabled: bool,
}
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize, JsonSchema)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SelectionMenuLabels {
#[schemars(length(min = 1))]
pub title: String,
#[schemars(length(min = 1))]
pub copy: String,
#[schemars(length(min = 1))]
pub select_all: String,
}
pub fn selection_menu_contract() -> Contract {
Contract {
name: "maka.ui.SelectionMenu".into(),
version: 1,
transport: Transport::Local,
interface: Interface::Component {
props: serde_json::to_value(schemars::schema_for!(SelectionMenuProps))
.expect("selection menu props")
.into(),
events: BTreeMap::new(),
captures: BTreeMap::new(),
},
}
}
pub const IMPLEMENTATION: &str = "maka.ui.selection-menu";
pub fn native() -> maka_plugin_core::package::NativeDefinition {
maka_plugin_core::package::NativeDefinition::new(
IMPLEMENTATION,
serde_json::json!({"type":"object","properties":{},"required":[],"additionalProperties":false}),
[("SelectionMenu", selection_menu_contract())],
)
}