ステッパーコンポーネント(GcStepper)では、各ステップの状態に応じてインジケーターアイコンを設定できます。
アクティブステップ
activeIndicatorIconプロパティでは、現在アクティブなステップに表示するインジケーターアイコンを指定できます。
設定例は以下の通りです。
検証エラーのあるステップ
invalidIndicatorIconプロパティでは、検証エラーが発生しているステップに表示するインジケーターアイコンを指定できます。
設定例は以下の通りです。
検証済みのステップ
validIndicatorIconプロパティでは、検証が完了し有効なステップに表示するインジケーターアイコンを指定できます。
設定例は以下の通りです。
import '@mescius/inputman/CSS/gc.inputman-js.css';
import { InputMan } from '@mescius/inputman';
InputMan.appearanceStyle = InputMan.AppearanceStyle.Modern;
const nameInput = new InputMan.GcTextBox(document.getElementById('name'), {
watermarkDisplayNullText: '名前',
width: 300,
height: 35,
text: '入力 太郎',
});
const addressInput = new InputMan.GcTextBox(document.getElementById('address'),
{
watermarkDisplayNullText: 'メールアドレス',
width: 300,
height: 35,
}
);
const gcStepper = new InputMan.GcStepper(document.getElementById('gcStepper'), {
activeIndicatorIcon: `<img src="$IMDEMOROOT$/ja/samples/stepper/indicator/img/active.svg">`,
invalidIndicatorIcon: `<img src="$IMDEMOROOT$/ja/samples/stepper/indicator/img/invalid.svg">`,
validIndicatorIcon: `<img src="$IMDEMOROOT$/ja/samples/stepper/indicator/img/valid.svg">`,
activeIndex: 2,
steps: [
{
label: 'お名前',
isValid: true,
icon: `<img src="$IMDEMOROOT$/ja/samples/stepper/indicator/img/user.svg" alt="お名前" style="width:1em;height:1em;">`,
target: () => document.getElementById('form1'),
},
{
label: 'メールアドレス',
isValid: false,
icon: `<img src="$IMDEMOROOT$/ja/samples/stepper/indicator/img/email.svg" alt="メールアドレス" style="width:1em;height:1em;">`,
target: () => document.getElementById('form2'),
},
{
label: '送信完了',
icon: `<img src="$IMDEMOROOT$/ja/samples/stepper/indicator/img/sended.svg" alt="送信完了" style="width:1em;height:1em;">`,
target: `
<div style="text-align: center; padding: 5px;">
<h3>メールアドレスが正しくありません。</h3>
<p>前のステップに戻り、正しいメールアドレスを入力してください。</p>
</div>
`,
},
],
});
const validator1 = new InputMan.GcValidator({
items: [
{
control: addressInput,
ruleSet: [
{
rule: (control) => {
const regexp =
/^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}\.[A-Za-z0-9]{1,}$/;
return regexp.test(control.value);
},
},
],
validateWhen: InputMan.ValidateWhen.Typing,
},
],
defaultNotify: {
fail: {
controlState: true
}
}
});
validator1.validate();
validator1.addEventListener(InputMan.GcValidatorEvent.ValidationFailed, (s, e) => {
gcStepper.steps[1].isValid = false;
});
validator1.addEventListener(InputMan.GcValidatorEvent.ValidationSucceeded, (s, e) => {
gcStepper.steps[1].isValid = true;
});
document
.querySelectorAll('.prevBtn')
.forEach((v) => v.addEventListener('click', () => gcStepper.previous()));
document
.querySelectorAll('.nextBtn')
.forEach((v) => v.addEventListener('click', () => gcStepper.next()));
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>ステッパーコンポーネント - インジケーター</title>
<!-- SystemJS -->
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script src="systemjs.config.js"></script>
<script>
window.onload = function () {
System.import('./src/app');
}
</script>
</head>
<body>
<div id="form1">
<input id="name" />
<button class="nextBtn">次へ</button>
</div>
<div id="form2">
<input id="address" />
<div class="button-group">
<button class="prevBtn">戻る</button>
<button class="nextBtn">次へ</button>
</div>
</div>
<div class="container">
<div id="gcStepper"></div>
</div>
</body>
</html>
button {
min-width: 60px;
padding: 5px 7px;
border: none;
border-radius: 6px;
background: #0056d6;
color: #fff;
font-size: 0.8em;
font-weight: 300;
cursor: pointer;
margin-left: 10px;
margin-top: 10px;
box-shadow: 0 1px 3px #0056d61a;
}
.container {
border: 1px solid #ccc;
margin: 10px auto;
background: #fff;
border-radius: 12px;
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1);
padding: 32px 36px 28px 36px;
}
.prevBtn,
.panel button {
background: #f3f4f6;
color: #2d3a4b;
border: 1px solid #e0e0e0;
}
.step {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
#form1,
#form2 {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
}
#form2 input {
margin-bottom: 10px;
}
#form2 .button-group {
display: flex;
gap: 10px;
}
.gcim_watermark_null {
color: lightgrey;
}
button {
min-width: 60px;
padding: 5px 7px;
border: none;
border-radius: 6px;
background: #0056d6;
color: #fff;
font-size: 0.8em;
font-weight: 300;
cursor: pointer;
margin-left: 10px;
margin-top: 10px;
box-shadow: 0 1px 3px #0056d61a;
}
.prevBtn,
.panel button {
background: #f3f4f6;
color: #2d3a4b;
border: 1px solid #e0e0e0;
}
.step {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
#form1,
#form2 {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
}
#form2 input {
margin-bottom: 10px;
}
#form2 .button-group {
display: flex;
gap: 10px;
}
[gcim-control-appearance="modern"] .gcim_watermark_null {
color: lightgrey;
}
System.config({
transpiler: 'plugin-babel',
babelOptions: {
es2015: true
},
meta: {
'*.css': { loader: 'css' }
},
paths: {
// paths serve as alias
'npm:': 'node_modules/'
},
// map tells the System loader where to look for things
map: {
'@mescius/inputman': 'npm:@mescius/inputman/index.js',
'@mescius/inputman/CSS': 'npm:@mescius/inputman/CSS',
'@mescius/inputman.richtexteditor': 'npm:@mescius/inputman.richtexteditor/index.js',
"@mescius/inputman.richtexteditor/CSS": "npm:@mescius/inputman.richtexteditor/CSS",
'@mescius/inputman.richtexteditor/JS/plugins/advlist': 'npm:@mescius/inputman.richtexteditor/JS/plugins/advlist/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/all': 'npm:@mescius/inputman.richtexteditor/JS/plugins/all/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/autosave': 'npm:@mescius/inputman.richtexteditor/JS/plugins/autosave/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/charmap': 'npm:@mescius/inputman.richtexteditor/JS/plugins/charmap/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/directionality': 'npm:@mescius/inputman.richtexteditor/JS/plugins/directionality/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/emoticons': 'npm:@mescius/inputman.richtexteditor/JS/plugins/emoticons/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/fullscreen': 'npm:@mescius/inputman.richtexteditor/JS/plugins/fullscreen/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/htmlcode': 'npm:@mescius/inputman.richtexteditor/JS/plugins/htmlcode/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/image': 'npm:@mescius/inputman.richtexteditor/JS/plugins/image/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/link': 'npm:@mescius/inputman.richtexteditor/JS/plugins/link/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/lists': 'npm:@mescius/inputman.richtexteditor/JS/plugins/lists/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/media': 'npm:@mescius/inputman.richtexteditor/JS/plugins/media/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/pagebreak': 'npm:@mescius/inputman.richtexteditor/JS/plugins/pagebreak/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/preview': 'npm:@mescius/inputman.richtexteditor/JS/plugins/preview/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/save': 'npm:@mescius/inputman.richtexteditor/JS/plugins/save/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/searchreplace': 'npm:@mescius/inputman.richtexteditor/JS/plugins/searchreplace/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/table': 'npm:@mescius/inputman.richtexteditor/JS/plugins/table/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/template': 'npm:@mescius/inputman.richtexteditor/JS/plugins/template/plugin.js',
'@mescius/inputman.richtexteditor/JS/plugins/wordcount': 'npm:@mescius/inputman.richtexteditor/JS/plugins/wordcount/plugin.js',
'@mescius/inputman.comment': 'npm:@mescius/inputman.comment/index.js',
'@mescius/inputman.comment/CSS': 'npm:@mescius/inputman.comment/CSS',
'@mescius/wijmo': 'npm:@mescius/wijmo/index.js',
'@mescius/wijmo.styles': 'npm:@mescius/wijmo.styles',
'@mescius/wijmo.cultures': 'npm:@mescius/wijmo.cultures',
'@mescius/wijmo.input': 'npm:@mescius/wijmo.input/index.js',
'@mescius/wijmo.grid': 'npm:@mescius/wijmo.grid/index.js',
'@mescius/wijmo.nav': 'npm:@mescius/wijmo.nav/index.js',
'@mescius/spread-sheets': 'npm:@mescius/spread-sheets/index.js',
'@mescius/spread-sheets-resources-ja': 'npm:@mescius/spread-sheets-resources-ja/index.js',
'@mescius/spread-sheets/styles': 'npm:@mescius/spread-sheets/styles',
'css': 'npm:systemjs-plugin-css/css.js',
'plugin-babel': 'npm:systemjs-plugin-babel/plugin-babel.js',
'systemjs-babel-build': 'npm:systemjs-plugin-babel/systemjs-babel-browser.js'
},
// packages tells the System loader how to load when no filename and/or no extension
packages: {
src: {
defaultExtension: 'js'
},
"node_modules": {
defaultExtension: 'js'
},
}
});