@gumigumih/react-calculator-input-form 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -9
- package/dist/components/organisms/CalculatorInputForm.d.ts +13 -0
- package/dist/index.css +2 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.esm.css +2 -0
- package/dist/index.esm.css.map +1 -0
- package/dist/index.esm.js +24 -4
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +24 -4
- package/dist/index.js.map +1 -1
- package/package.json +5 -2
- package/dist/components/organisms/CalculatorInput.d.ts +0 -13
- /package/dist/components/organisms/__tests__/{CalculatorInput.test.d.ts → CalculatorInputForm.test.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
- ⌨️ **キーボードショートカット対応**
|
|
21
21
|
- 🔧 **TypeScript対応**
|
|
22
22
|
- ⚙️ **カスタマイズ可能なオプション設定**
|
|
23
|
+
- 🎨 **スタイルの自動読み込み**(別途CSSファイルの読み込み不要)
|
|
23
24
|
|
|
24
25
|
## 🚀 インストール
|
|
25
26
|
|
|
@@ -40,15 +41,14 @@ pnpm add @gumigumih/react-calculator-input-form
|
|
|
40
41
|
### 最も簡単な使用方法(推奨)
|
|
41
42
|
|
|
42
43
|
```tsx
|
|
43
|
-
import {
|
|
44
|
-
import '@gumigumih/react-calculator-input-form/styles';
|
|
44
|
+
import { CalculatorInputForm } from '@gumigumih/react-calculator-input-form';
|
|
45
45
|
|
|
46
46
|
function App() {
|
|
47
47
|
const [amount, setAmount] = useState('');
|
|
48
48
|
|
|
49
49
|
return (
|
|
50
50
|
<div>
|
|
51
|
-
<
|
|
51
|
+
<CalculatorInputForm
|
|
52
52
|
value={amount}
|
|
53
53
|
onChange={setAmount}
|
|
54
54
|
title="金額入力"
|
|
@@ -96,10 +96,10 @@ function App() {
|
|
|
96
96
|
|
|
97
97
|
## ⚙️ オプション設定
|
|
98
98
|
|
|
99
|
-
###
|
|
99
|
+
### CalculatorInputForm オプション
|
|
100
100
|
|
|
101
101
|
```tsx
|
|
102
|
-
<
|
|
102
|
+
<CalculatorInputForm
|
|
103
103
|
value={amount}
|
|
104
104
|
onChange={setAmount}
|
|
105
105
|
// 税計算の有効/無効
|
|
@@ -158,7 +158,7 @@ function App() {
|
|
|
158
158
|
|
|
159
159
|
```tsx
|
|
160
160
|
// 日本円フォーマット
|
|
161
|
-
<
|
|
161
|
+
<CalculatorInputForm
|
|
162
162
|
value={amount}
|
|
163
163
|
onChange={setAmount}
|
|
164
164
|
numberFormatOptions={{
|
|
@@ -170,7 +170,7 @@ function App() {
|
|
|
170
170
|
/>
|
|
171
171
|
|
|
172
172
|
// ドルフォーマット
|
|
173
|
-
<
|
|
173
|
+
<CalculatorInputForm
|
|
174
174
|
value={amount}
|
|
175
175
|
onChange={setAmount}
|
|
176
176
|
numberFormatOptions={{
|
|
@@ -183,7 +183,7 @@ function App() {
|
|
|
183
183
|
/>
|
|
184
184
|
|
|
185
185
|
// パーセントフォーマット
|
|
186
|
-
<
|
|
186
|
+
<CalculatorInputForm
|
|
187
187
|
value={amount}
|
|
188
188
|
onChange={setAmount}
|
|
189
189
|
numberFormatOptions={{
|
|
@@ -200,7 +200,7 @@ react-number-formatの**すべてのプロパティ**が利用可能です。詳
|
|
|
200
200
|
|
|
201
201
|
## 📋 Props
|
|
202
202
|
|
|
203
|
-
###
|
|
203
|
+
### CalculatorInputForm Props
|
|
204
204
|
|
|
205
205
|
| プロパティ | 型 | 必須 | デフォルト | 説明 |
|
|
206
206
|
|------------|----|------|------------|------|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface CalculatorInputFormProps {
|
|
2
|
+
value: string;
|
|
3
|
+
onChange: (value: string) => void;
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
enableTaxCalculation?: boolean;
|
|
9
|
+
decimalPlaces?: number;
|
|
10
|
+
numberFormatOptions?: any;
|
|
11
|
+
displayPlaceholder?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const CalculatorInputForm: ({ value, onChange, placeholder, className, title, description, enableTaxCalculation, decimalPlaces, numberFormatOptions, displayPlaceholder, }: CalculatorInputFormProps) => import("react/jsx-runtime").JSX.Element | null;
|
package/dist/index.css
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
.calculator-overlay{align-items:center;background:rgba(0,0,0,.5);bottom:0;display:flex;justify-content:center;left:0;padding:1rem;position:fixed;right:0;top:0;z-index:9999}.calculator-background-pattern{inset:0;overflow:hidden;position:absolute}.calculator-background-pattern>div{inset:0;opacity:.1;position:absolute}.calculator-pattern-item{font-size:2rem;position:absolute}.calculator-pattern-item:first-child{font-size:2.5rem;left:2.5rem;top:2.5rem}.calculator-pattern-item:nth-child(2){font-size:1.875rem;right:5rem;top:5rem}.calculator-pattern-item:nth-child(3){font-size:1.5rem;left:5rem;top:10rem}.calculator-pattern-item:nth-child(4){font-size:1.875rem;right:10rem;top:15rem}.calculator-pattern-item:nth-child(5){font-size:1.5rem;left:10rem;top:20rem}.calculator-pattern-item:nth-child(6){bottom:10rem;font-size:1.875rem;right:5rem}.calculator-modal{background:#fff;border-radius:.75rem;box-shadow:0 25px 50px -12px rgba(0,0,0,.25);max-height:90vh;max-width:24rem;overflow-y:auto;position:relative;width:100%;z-index:10}.calculator-header{align-items:center;border-bottom:1px solid #e5e7eb;display:flex;justify-content:space-between;padding:1rem}.calculator-logo-container{align-items:center;display:flex;gap:.75rem}.calculator-logo{align-items:center;background-color:#60a5fa;border-radius:50%;display:flex;height:2.5rem;justify-content:center;width:2.5rem}.calculator-logo-text{color:#fff;font-size:1.25rem;font-weight:700}.calculator-title{color:#111827;font-size:1.125rem;font-weight:700;margin:0}.calculator-subtitle{color:#6b7280;font-size:.75rem;margin:0}.calculator-close-button{background:none;border:none;border-radius:.375rem;color:#6b7280;cursor:pointer;font-size:1.25rem;padding:.5rem;transition:all .2s ease-in-out}.calculator-close-button:hover{background-color:#6b7280;color:#fff}.calculator-participants{display:flex;flex-direction:column;gap:1rem;padding:1.5rem}.calculator-participant-row{align-items:center;border:2px solid #e5e7eb;border-radius:.5rem;cursor:pointer;display:flex;justify-content:space-between;padding:1rem;transition:all .2s}.calculator-participant-row:hover{border-color:#d1d5db}.calculator-participant-row.selected{background-color:#eff6ff;border-color:#3b82f6}.calculator-participant-info{align-items:center;display:flex;gap:.75rem}.calculator-participant-name{color:#374151;font-size:1.125rem;font-weight:500}.calculator-participant-amount{align-items:center;display:flex;gap:.5rem}.calculator-amount-text{color:#111827;font-size:1.5rem;font-weight:700}.calculator-currency{color:#6b7280}.calculator-clear-button{background:none;border:none;color:#9ca3af;cursor:pointer;padding:.25rem;transition:color .2s}.calculator-clear-button:hover{color:#ef4444}.calculator-participant-controls{display:flex;gap:.5rem}.calculator-add-button{background-color:#3b82f6;border:none;border-radius:.5rem;color:#fff;cursor:pointer;flex:1;font-size:.875rem;font-weight:700;padding:.5rem 1rem;transition:background-color .2s}.calculator-add-button:hover{background-color:#2563eb}.calculator-remove-button{background-color:#6b7280;border:none;border-radius:.5rem;color:#fff;cursor:pointer;font-size:.875rem;font-weight:700;padding:.5rem 1rem;transition:background-color .2s}.calculator-remove-button:hover{background-color:#4b5563}.calculator-keypad-section{border-top:none;padding:1rem}.calculator-display-input{background-color:#f3f4f6;border:none;border-radius:0!important;box-sizing:border-box;font-family:ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace;font-size:1.5rem;outline:none;padding:.75rem 1.25rem;text-align:right;width:100%}.calculator-error{color:#ef4444;font-size:.75rem;margin-top:.25rem;padding-left:1.25rem;padding-right:1.25rem}.calculator-keypad{display:flex;flex-direction:column;gap:.5rem}.calculator-keypad-grid{display:grid;gap:.5rem;grid-template-columns:repeat(4,1fr)}.calculator-keypad-button{border:none;border-radius:.5rem;box-shadow:0 4px 6px -1px rgba(0,0,0,.1);cursor:pointer;font-size:1rem;font-weight:700;padding:.75rem;transition:all .2s}.calculator-keypad-button.number{background-color:#f3f4f6;color:#374151}.calculator-keypad-button.number:hover{background-color:#dbeafe}.calculator-keypad-button.operator{background-color:#ff9f0a;color:#fff}.calculator-keypad-button.operator:hover{background-color:#ffb340}.calculator-keypad-button.clear{background-color:#ef4444;color:#fff}.calculator-keypad-button.clear:hover{background-color:#dc2626}.calculator-keypad-button.backspace{background-color:#a5a5a5;color:#fff}.calculator-keypad-button.backspace:hover{background-color:#b5b5b5}.calculator-keypad-button.decimal{background-color:#e5e7eb;color:#374151}.calculator-keypad-button.decimal:hover{background-color:#d1d5db}.calculator-keypad-button.include{background-color:#a5f3fc;color:#374151}.calculator-keypad-button.include:hover{background-color:#67e8f9}.calculator-keypad-button.exclude{background-color:#fce7f3;color:#374151}.calculator-keypad-button.exclude:hover{background-color:#fbcfe8}.calculator-action-buttons{display:grid;gap:.75rem;grid-template-columns:1fr 1fr}.calculator-equals-button{background-color:#ff9f0a;border:none;border-radius:.5rem;box-shadow:0 10px 15px -3px rgba(0,0,0,.1);color:#fff;cursor:pointer;font-size:1rem;font-weight:700;padding:.75rem;transition:background-color .2s}.calculator-equals-button:hover{background-color:#ffb340}.calculator-decide-button{background-color:#10b981;border:none;border-radius:.5rem;box-shadow:0 10px 15px -3px rgba(0,0,0,.1);color:#fff;cursor:pointer;font-size:1rem;font-weight:700;grid-column:1/-1;padding:.75rem;transition:background-color .2s}.calculator-decide-button:hover{background-color:#059669}.calculator-total-section{border-top:1px solid #e5e7eb;padding:1.5rem}.calculator-total-row{align-items:center;display:flex;justify-content:space-between;margin-bottom:1rem}.calculator-total-label{color:#374151;font-size:1.125rem;font-weight:500}.calculator-total-amount{color:#111827;font-size:1.5rem;font-weight:700}.calculator-per-person{color:#2563eb}.calculator-calculate-button{background-color:#10b981;border:none;border-radius:.5rem;box-shadow:0 10px 15px -3px rgba(0,0,0,.1);color:#fff;cursor:pointer;font-size:1.125rem;font-weight:700;padding:1rem;transition:background-color .2s;width:100%}.calculator-calculate-button:hover{background-color:#059669}@media (max-width:640px){.calculator-overlay{padding:.5rem}.calculator-modal{margin:.5rem;max-width:100%}.calculator-keypad-button{font-size:1.125rem;padding:.75rem}}.calculator-keypad-button.number.zero-wide{grid-column:span 2}
|
|
2
|
+
/*# sourceMappingURL=index.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["calculator.css"],"names":[],"mappings":"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","file":"index.css","sourcesContent":["/* 電卓入力フォーム用スタイル */\n\n/* 背景とレイアウト */\n.calculator-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5); /* 黒の半透明 */\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 9999;\n padding: 1rem;\n}\n\n.calculator-background-pattern {\n position: absolute;\n inset: 0;\n overflow: hidden;\n}\n\n.calculator-background-pattern > div {\n position: absolute;\n inset: 0;\n opacity: 0.1;\n}\n\n.calculator-pattern-item {\n position: absolute;\n font-size: 2rem;\n}\n\n.calculator-pattern-item:nth-child(1) {\n top: 2.5rem;\n left: 2.5rem;\n font-size: 2.5rem;\n}\n.calculator-pattern-item:nth-child(2) {\n top: 5rem;\n right: 5rem;\n font-size: 1.875rem;\n}\n.calculator-pattern-item:nth-child(3) {\n top: 10rem;\n left: 5rem;\n font-size: 1.5rem;\n}\n.calculator-pattern-item:nth-child(4) {\n top: 15rem;\n right: 10rem;\n font-size: 1.875rem;\n}\n.calculator-pattern-item:nth-child(5) {\n top: 20rem;\n left: 10rem;\n font-size: 1.5rem;\n}\n.calculator-pattern-item:nth-child(6) {\n bottom: 10rem;\n right: 5rem;\n font-size: 1.875rem;\n}\n\n/* メインカード */\n.calculator-modal {\n background: white;\n border-radius: 0.75rem;\n width: 100%;\n max-width: 24rem;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);\n max-height: 90vh;\n overflow-y: auto;\n position: relative;\n z-index: 10;\n}\n\n/* ヘッダー */\n.calculator-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.calculator-logo-container {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n}\n\n.calculator-logo {\n width: 2.5rem;\n height: 2.5rem;\n background-color: #60a5fa;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.calculator-logo-text {\n color: white;\n font-size: 1.25rem;\n font-weight: bold;\n}\n\n.calculator-title {\n font-size: 1.125rem;\n font-weight: 700;\n color: #111827;\n margin: 0;\n}\n\n.calculator-subtitle {\n font-size: 0.75rem;\n color: #6b7280;\n margin: 0;\n}\n\n.calculator-close-button {\n background: none;\n border: none;\n font-size: 1.25rem;\n color: #6b7280;\n cursor: pointer;\n padding: 0.5rem;\n border-radius: 0.375rem;\n transition: all 0.2s ease-in-out;\n}\n\n.calculator-close-button:hover {\n background-color: #6b7280;\n color: white;\n}\n\n/* 参加者セクション */\n.calculator-participants {\n padding: 1.5rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.calculator-participant-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1rem;\n border-radius: 0.5rem;\n border: 2px solid #e5e7eb;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.calculator-participant-row:hover {\n border-color: #d1d5db;\n}\n\n.calculator-participant-row.selected {\n border-color: #3b82f6;\n background-color: #eff6ff;\n}\n\n.calculator-participant-info {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n}\n\n.calculator-participant-name {\n font-size: 1.125rem;\n font-weight: 500;\n color: #374151;\n}\n\n.calculator-participant-amount {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.calculator-amount-text {\n font-size: 1.5rem;\n font-weight: bold;\n color: #111827;\n}\n\n.calculator-currency {\n color: #6b7280;\n}\n\n.calculator-clear-button {\n color: #9ca3af;\n transition: color 0.2s;\n background: none;\n border: none;\n cursor: pointer;\n padding: 0.25rem;\n}\n\n.calculator-clear-button:hover {\n color: #ef4444;\n}\n\n/* 参加者管理ボタン */\n.calculator-participant-controls {\n display: flex;\n gap: 0.5rem;\n}\n\n.calculator-add-button {\n flex: 1;\n padding: 0.5rem 1rem;\n background-color: #3b82f6;\n color: white;\n border: none;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n font-weight: bold;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.calculator-add-button:hover {\n background-color: #2563eb;\n}\n\n.calculator-remove-button {\n padding: 0.5rem 1rem;\n background-color: #6b7280;\n color: white;\n border: none;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n font-weight: bold;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.calculator-remove-button:hover {\n background-color: #4b5563;\n}\n\n/* 電卓キーパッド */\n.calculator-keypad-section {\n border-top: none;\n padding: 1rem;\n}\n\n.calculator-display {\n}\n\n.calculator-display-input {\n text-align: right;\n font-size: 1.5rem;\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Consolas,\n \"Liberation Mono\", Menlo, monospace;\n background-color: #f3f4f6;\n padding: 0.75rem 1.25rem;\n border-radius: 0 !important; /* 角丸を確実に無効化 */\n width: 100%;\n box-sizing: border-box; /* パディング込みで100%に収める */\n border: none;\n outline: none;\n}\n\n/* エラーメッセージ */\n.calculator-error {\n color: #ef4444;\n font-size: 0.75rem; /* text-xs 相当 */\n padding-left: 1.25rem;\n padding-right: 1.25rem; /* 左右に余白 */\n margin-top: 0.25rem;\n}\n\n/* キーパッドボタン */\n.calculator-keypad {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.calculator-keypad-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 0.5rem;\n}\n\n.calculator-keypad-button {\n padding: 0.75rem;\n font-size: 1rem;\n font-weight: 700;\n border-radius: 0.5rem;\n transition: all 0.2s;\n border: none;\n cursor: pointer;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n}\n\n.calculator-keypad-button.number {\n background-color: #f3f4f6;\n color: #374151;\n}\n\n.calculator-keypad-button.number:hover {\n background-color: #dbeafe;\n}\n\n.calculator-keypad-button.operator {\n background-color: #ff9f0a; /* iOS calculator orange */\n color: #ffffff;\n}\n\n.calculator-keypad-button.operator:hover {\n background-color: #ffb340; /* lighter on hover */\n}\n\n.calculator-keypad-button.clear {\n background-color: #ef4444;\n color: white;\n}\n\n.calculator-keypad-button.clear:hover {\n background-color: #dc2626;\n}\n\n.calculator-keypad-button.backspace {\n background-color: #a5a5a5; /* iOS-like function key gray */\n color: #ffffff;\n}\n\n.calculator-keypad-button.backspace:hover {\n background-color: #b5b5b5;\n}\n\n.calculator-keypad-button.decimal {\n background-color: #e5e7eb;\n color: #374151;\n}\n\n.calculator-keypad-button.decimal:hover {\n background-color: #d1d5db;\n}\n\n/* 税込/税抜の視認性向上 */\n/* 税込=薄い水色系(クールで落ち着いた色) */\n\n/* 薄い水色基調(税込) */\n.calculator-keypad-button.include {\n background-color: #a5f3fc; /* cyan-200 */\n color: #374151; /* 数字ボタンと同じ文字色 */\n}\n\n.calculator-keypad-button.include:hover {\n background-color: #67e8f9; /* cyan-300 */\n}\n\n/* 税抜=薄い桃色系(温かみのある色) */\n/* 薄い桃色基調(税抜) */\n.calculator-keypad-button.exclude {\n background-color: #fce7f3; /* pink-200 */\n color: #374151; /* 数字ボタンと同じ文字色 */\n}\n\n.calculator-keypad-button.exclude:hover {\n background-color: #fbcfe8; /* pink-300 */\n}\n\n.calculator-action-buttons {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0.75rem;\n}\n\n.calculator-equals-button {\n padding: 0.75rem;\n background-color: #ff9f0a; /* distinct from tax buttons, iOS-like */\n color: #ffffff;\n font-size: 1rem;\n font-weight: 700;\n border: none;\n border-radius: 0.5rem;\n cursor: pointer;\n transition: background-color 0.2s;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n}\n\n.calculator-equals-button:hover {\n background-color: #ffb340;\n}\n\n.calculator-decide-button {\n padding: 0.75rem;\n background-color: #10b981;\n color: white;\n font-size: 1rem;\n font-weight: 700;\n border: none;\n border-radius: 0.5rem;\n cursor: pointer;\n transition: background-color 0.2s;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n grid-column: 1 / -1; /* 横幅100%(2列分) */\n}\n\n.calculator-decide-button:hover {\n background-color: #059669;\n}\n\n/* 合計と計算ボタン */\n.calculator-total-section {\n padding: 1.5rem;\n border-top: 1px solid #e5e7eb;\n}\n\n.calculator-total-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n}\n\n.calculator-total-label {\n font-size: 1.125rem;\n font-weight: 500;\n color: #374151;\n}\n\n.calculator-total-amount {\n font-size: 1.5rem;\n font-weight: bold;\n color: #111827;\n}\n\n.calculator-per-person {\n color: #2563eb;\n}\n\n.calculator-calculate-button {\n width: 100%;\n padding: 1rem;\n background-color: #10b981;\n color: white;\n font-size: 1.125rem;\n font-weight: bold;\n border: none;\n border-radius: 0.5rem;\n cursor: pointer;\n transition: background-color 0.2s;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n}\n\n.calculator-calculate-button:hover {\n background-color: #059669;\n}\n\n/* レスポンシブ対応 */\n@media (max-width: 640px) {\n .calculator-overlay {\n padding: 0.5rem;\n }\n\n .calculator-modal {\n max-width: 100%;\n margin: 0.5rem;\n }\n\n .calculator-keypad-button {\n padding: 0.75rem;\n font-size: 1.125rem;\n }\n}\n\n.calculator-keypad-button.number.zero-wide {\n grid-column: span 2;\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import './styles/calculator.css';
|
|
1
2
|
export { Button } from './components/atoms/Button';
|
|
2
3
|
export { Icon } from './components/atoms/Icon';
|
|
3
4
|
export { CalculatorDisplay } from './components/molecules/CalculatorDisplay';
|
|
4
5
|
export { CalculatorKeypad } from './components/molecules/CalculatorKeypad';
|
|
5
6
|
export { Calculator } from './components/organisms/Calculator';
|
|
6
|
-
export {
|
|
7
|
+
export { CalculatorInputForm } from './components/organisms/CalculatorInputForm';
|
|
7
8
|
export type { ButtonProps } from './components/atoms/Button';
|
|
8
9
|
export type { IconProps } from './components/atoms/Icon';
|
|
9
10
|
export type { CalculatorDisplayProps } from './components/molecules/CalculatorDisplay';
|
|
10
11
|
export type { CalculatorKeypadProps } from './components/molecules/CalculatorKeypad';
|
|
11
12
|
export type { CalculatorProps } from './components/organisms/Calculator';
|
|
12
|
-
export type {
|
|
13
|
+
export type { CalculatorInputFormProps } from './components/organisms/CalculatorInputForm';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
.calculator-overlay{align-items:center;background:rgba(0,0,0,.5);bottom:0;display:flex;justify-content:center;left:0;padding:1rem;position:fixed;right:0;top:0;z-index:9999}.calculator-background-pattern{inset:0;overflow:hidden;position:absolute}.calculator-background-pattern>div{inset:0;opacity:.1;position:absolute}.calculator-pattern-item{font-size:2rem;position:absolute}.calculator-pattern-item:first-child{font-size:2.5rem;left:2.5rem;top:2.5rem}.calculator-pattern-item:nth-child(2){font-size:1.875rem;right:5rem;top:5rem}.calculator-pattern-item:nth-child(3){font-size:1.5rem;left:5rem;top:10rem}.calculator-pattern-item:nth-child(4){font-size:1.875rem;right:10rem;top:15rem}.calculator-pattern-item:nth-child(5){font-size:1.5rem;left:10rem;top:20rem}.calculator-pattern-item:nth-child(6){bottom:10rem;font-size:1.875rem;right:5rem}.calculator-modal{background:#fff;border-radius:.75rem;box-shadow:0 25px 50px -12px rgba(0,0,0,.25);max-height:90vh;max-width:24rem;overflow-y:auto;position:relative;width:100%;z-index:10}.calculator-header{align-items:center;border-bottom:1px solid #e5e7eb;display:flex;justify-content:space-between;padding:1rem}.calculator-logo-container{align-items:center;display:flex;gap:.75rem}.calculator-logo{align-items:center;background-color:#60a5fa;border-radius:50%;display:flex;height:2.5rem;justify-content:center;width:2.5rem}.calculator-logo-text{color:#fff;font-size:1.25rem;font-weight:700}.calculator-title{color:#111827;font-size:1.125rem;font-weight:700;margin:0}.calculator-subtitle{color:#6b7280;font-size:.75rem;margin:0}.calculator-close-button{background:none;border:none;border-radius:.375rem;color:#6b7280;cursor:pointer;font-size:1.25rem;padding:.5rem;transition:all .2s ease-in-out}.calculator-close-button:hover{background-color:#6b7280;color:#fff}.calculator-participants{display:flex;flex-direction:column;gap:1rem;padding:1.5rem}.calculator-participant-row{align-items:center;border:2px solid #e5e7eb;border-radius:.5rem;cursor:pointer;display:flex;justify-content:space-between;padding:1rem;transition:all .2s}.calculator-participant-row:hover{border-color:#d1d5db}.calculator-participant-row.selected{background-color:#eff6ff;border-color:#3b82f6}.calculator-participant-info{align-items:center;display:flex;gap:.75rem}.calculator-participant-name{color:#374151;font-size:1.125rem;font-weight:500}.calculator-participant-amount{align-items:center;display:flex;gap:.5rem}.calculator-amount-text{color:#111827;font-size:1.5rem;font-weight:700}.calculator-currency{color:#6b7280}.calculator-clear-button{background:none;border:none;color:#9ca3af;cursor:pointer;padding:.25rem;transition:color .2s}.calculator-clear-button:hover{color:#ef4444}.calculator-participant-controls{display:flex;gap:.5rem}.calculator-add-button{background-color:#3b82f6;border:none;border-radius:.5rem;color:#fff;cursor:pointer;flex:1;font-size:.875rem;font-weight:700;padding:.5rem 1rem;transition:background-color .2s}.calculator-add-button:hover{background-color:#2563eb}.calculator-remove-button{background-color:#6b7280;border:none;border-radius:.5rem;color:#fff;cursor:pointer;font-size:.875rem;font-weight:700;padding:.5rem 1rem;transition:background-color .2s}.calculator-remove-button:hover{background-color:#4b5563}.calculator-keypad-section{border-top:none;padding:1rem}.calculator-display-input{background-color:#f3f4f6;border:none;border-radius:0!important;box-sizing:border-box;font-family:ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace;font-size:1.5rem;outline:none;padding:.75rem 1.25rem;text-align:right;width:100%}.calculator-error{color:#ef4444;font-size:.75rem;margin-top:.25rem;padding-left:1.25rem;padding-right:1.25rem}.calculator-keypad{display:flex;flex-direction:column;gap:.5rem}.calculator-keypad-grid{display:grid;gap:.5rem;grid-template-columns:repeat(4,1fr)}.calculator-keypad-button{border:none;border-radius:.5rem;box-shadow:0 4px 6px -1px rgba(0,0,0,.1);cursor:pointer;font-size:1rem;font-weight:700;padding:.75rem;transition:all .2s}.calculator-keypad-button.number{background-color:#f3f4f6;color:#374151}.calculator-keypad-button.number:hover{background-color:#dbeafe}.calculator-keypad-button.operator{background-color:#ff9f0a;color:#fff}.calculator-keypad-button.operator:hover{background-color:#ffb340}.calculator-keypad-button.clear{background-color:#ef4444;color:#fff}.calculator-keypad-button.clear:hover{background-color:#dc2626}.calculator-keypad-button.backspace{background-color:#a5a5a5;color:#fff}.calculator-keypad-button.backspace:hover{background-color:#b5b5b5}.calculator-keypad-button.decimal{background-color:#e5e7eb;color:#374151}.calculator-keypad-button.decimal:hover{background-color:#d1d5db}.calculator-keypad-button.include{background-color:#a5f3fc;color:#374151}.calculator-keypad-button.include:hover{background-color:#67e8f9}.calculator-keypad-button.exclude{background-color:#fce7f3;color:#374151}.calculator-keypad-button.exclude:hover{background-color:#fbcfe8}.calculator-action-buttons{display:grid;gap:.75rem;grid-template-columns:1fr 1fr}.calculator-equals-button{background-color:#ff9f0a;border:none;border-radius:.5rem;box-shadow:0 10px 15px -3px rgba(0,0,0,.1);color:#fff;cursor:pointer;font-size:1rem;font-weight:700;padding:.75rem;transition:background-color .2s}.calculator-equals-button:hover{background-color:#ffb340}.calculator-decide-button{background-color:#10b981;border:none;border-radius:.5rem;box-shadow:0 10px 15px -3px rgba(0,0,0,.1);color:#fff;cursor:pointer;font-size:1rem;font-weight:700;grid-column:1/-1;padding:.75rem;transition:background-color .2s}.calculator-decide-button:hover{background-color:#059669}.calculator-total-section{border-top:1px solid #e5e7eb;padding:1.5rem}.calculator-total-row{align-items:center;display:flex;justify-content:space-between;margin-bottom:1rem}.calculator-total-label{color:#374151;font-size:1.125rem;font-weight:500}.calculator-total-amount{color:#111827;font-size:1.5rem;font-weight:700}.calculator-per-person{color:#2563eb}.calculator-calculate-button{background-color:#10b981;border:none;border-radius:.5rem;box-shadow:0 10px 15px -3px rgba(0,0,0,.1);color:#fff;cursor:pointer;font-size:1.125rem;font-weight:700;padding:1rem;transition:background-color .2s;width:100%}.calculator-calculate-button:hover{background-color:#059669}@media (max-width:640px){.calculator-overlay{padding:.5rem}.calculator-modal{margin:.5rem;max-width:100%}.calculator-keypad-button{font-size:1.125rem;padding:.75rem}}.calculator-keypad-button.number.zero-wide{grid-column:span 2}
|
|
2
|
+
/*# sourceMappingURL=index.esm.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["calculator.css"],"names":[],"mappings":"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","file":"index.esm.css","sourcesContent":["/* 電卓入力フォーム用スタイル */\n\n/* 背景とレイアウト */\n.calculator-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5); /* 黒の半透明 */\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 9999;\n padding: 1rem;\n}\n\n.calculator-background-pattern {\n position: absolute;\n inset: 0;\n overflow: hidden;\n}\n\n.calculator-background-pattern > div {\n position: absolute;\n inset: 0;\n opacity: 0.1;\n}\n\n.calculator-pattern-item {\n position: absolute;\n font-size: 2rem;\n}\n\n.calculator-pattern-item:nth-child(1) {\n top: 2.5rem;\n left: 2.5rem;\n font-size: 2.5rem;\n}\n.calculator-pattern-item:nth-child(2) {\n top: 5rem;\n right: 5rem;\n font-size: 1.875rem;\n}\n.calculator-pattern-item:nth-child(3) {\n top: 10rem;\n left: 5rem;\n font-size: 1.5rem;\n}\n.calculator-pattern-item:nth-child(4) {\n top: 15rem;\n right: 10rem;\n font-size: 1.875rem;\n}\n.calculator-pattern-item:nth-child(5) {\n top: 20rem;\n left: 10rem;\n font-size: 1.5rem;\n}\n.calculator-pattern-item:nth-child(6) {\n bottom: 10rem;\n right: 5rem;\n font-size: 1.875rem;\n}\n\n/* メインカード */\n.calculator-modal {\n background: white;\n border-radius: 0.75rem;\n width: 100%;\n max-width: 24rem;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);\n max-height: 90vh;\n overflow-y: auto;\n position: relative;\n z-index: 10;\n}\n\n/* ヘッダー */\n.calculator-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.calculator-logo-container {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n}\n\n.calculator-logo {\n width: 2.5rem;\n height: 2.5rem;\n background-color: #60a5fa;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.calculator-logo-text {\n color: white;\n font-size: 1.25rem;\n font-weight: bold;\n}\n\n.calculator-title {\n font-size: 1.125rem;\n font-weight: 700;\n color: #111827;\n margin: 0;\n}\n\n.calculator-subtitle {\n font-size: 0.75rem;\n color: #6b7280;\n margin: 0;\n}\n\n.calculator-close-button {\n background: none;\n border: none;\n font-size: 1.25rem;\n color: #6b7280;\n cursor: pointer;\n padding: 0.5rem;\n border-radius: 0.375rem;\n transition: all 0.2s ease-in-out;\n}\n\n.calculator-close-button:hover {\n background-color: #6b7280;\n color: white;\n}\n\n/* 参加者セクション */\n.calculator-participants {\n padding: 1.5rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.calculator-participant-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1rem;\n border-radius: 0.5rem;\n border: 2px solid #e5e7eb;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.calculator-participant-row:hover {\n border-color: #d1d5db;\n}\n\n.calculator-participant-row.selected {\n border-color: #3b82f6;\n background-color: #eff6ff;\n}\n\n.calculator-participant-info {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n}\n\n.calculator-participant-name {\n font-size: 1.125rem;\n font-weight: 500;\n color: #374151;\n}\n\n.calculator-participant-amount {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.calculator-amount-text {\n font-size: 1.5rem;\n font-weight: bold;\n color: #111827;\n}\n\n.calculator-currency {\n color: #6b7280;\n}\n\n.calculator-clear-button {\n color: #9ca3af;\n transition: color 0.2s;\n background: none;\n border: none;\n cursor: pointer;\n padding: 0.25rem;\n}\n\n.calculator-clear-button:hover {\n color: #ef4444;\n}\n\n/* 参加者管理ボタン */\n.calculator-participant-controls {\n display: flex;\n gap: 0.5rem;\n}\n\n.calculator-add-button {\n flex: 1;\n padding: 0.5rem 1rem;\n background-color: #3b82f6;\n color: white;\n border: none;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n font-weight: bold;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.calculator-add-button:hover {\n background-color: #2563eb;\n}\n\n.calculator-remove-button {\n padding: 0.5rem 1rem;\n background-color: #6b7280;\n color: white;\n border: none;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n font-weight: bold;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.calculator-remove-button:hover {\n background-color: #4b5563;\n}\n\n/* 電卓キーパッド */\n.calculator-keypad-section {\n border-top: none;\n padding: 1rem;\n}\n\n.calculator-display {\n}\n\n.calculator-display-input {\n text-align: right;\n font-size: 1.5rem;\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Consolas,\n \"Liberation Mono\", Menlo, monospace;\n background-color: #f3f4f6;\n padding: 0.75rem 1.25rem;\n border-radius: 0 !important; /* 角丸を確実に無効化 */\n width: 100%;\n box-sizing: border-box; /* パディング込みで100%に収める */\n border: none;\n outline: none;\n}\n\n/* エラーメッセージ */\n.calculator-error {\n color: #ef4444;\n font-size: 0.75rem; /* text-xs 相当 */\n padding-left: 1.25rem;\n padding-right: 1.25rem; /* 左右に余白 */\n margin-top: 0.25rem;\n}\n\n/* キーパッドボタン */\n.calculator-keypad {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.calculator-keypad-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 0.5rem;\n}\n\n.calculator-keypad-button {\n padding: 0.75rem;\n font-size: 1rem;\n font-weight: 700;\n border-radius: 0.5rem;\n transition: all 0.2s;\n border: none;\n cursor: pointer;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n}\n\n.calculator-keypad-button.number {\n background-color: #f3f4f6;\n color: #374151;\n}\n\n.calculator-keypad-button.number:hover {\n background-color: #dbeafe;\n}\n\n.calculator-keypad-button.operator {\n background-color: #ff9f0a; /* iOS calculator orange */\n color: #ffffff;\n}\n\n.calculator-keypad-button.operator:hover {\n background-color: #ffb340; /* lighter on hover */\n}\n\n.calculator-keypad-button.clear {\n background-color: #ef4444;\n color: white;\n}\n\n.calculator-keypad-button.clear:hover {\n background-color: #dc2626;\n}\n\n.calculator-keypad-button.backspace {\n background-color: #a5a5a5; /* iOS-like function key gray */\n color: #ffffff;\n}\n\n.calculator-keypad-button.backspace:hover {\n background-color: #b5b5b5;\n}\n\n.calculator-keypad-button.decimal {\n background-color: #e5e7eb;\n color: #374151;\n}\n\n.calculator-keypad-button.decimal:hover {\n background-color: #d1d5db;\n}\n\n/* 税込/税抜の視認性向上 */\n/* 税込=薄い水色系(クールで落ち着いた色) */\n\n/* 薄い水色基調(税込) */\n.calculator-keypad-button.include {\n background-color: #a5f3fc; /* cyan-200 */\n color: #374151; /* 数字ボタンと同じ文字色 */\n}\n\n.calculator-keypad-button.include:hover {\n background-color: #67e8f9; /* cyan-300 */\n}\n\n/* 税抜=薄い桃色系(温かみのある色) */\n/* 薄い桃色基調(税抜) */\n.calculator-keypad-button.exclude {\n background-color: #fce7f3; /* pink-200 */\n color: #374151; /* 数字ボタンと同じ文字色 */\n}\n\n.calculator-keypad-button.exclude:hover {\n background-color: #fbcfe8; /* pink-300 */\n}\n\n.calculator-action-buttons {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0.75rem;\n}\n\n.calculator-equals-button {\n padding: 0.75rem;\n background-color: #ff9f0a; /* distinct from tax buttons, iOS-like */\n color: #ffffff;\n font-size: 1rem;\n font-weight: 700;\n border: none;\n border-radius: 0.5rem;\n cursor: pointer;\n transition: background-color 0.2s;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n}\n\n.calculator-equals-button:hover {\n background-color: #ffb340;\n}\n\n.calculator-decide-button {\n padding: 0.75rem;\n background-color: #10b981;\n color: white;\n font-size: 1rem;\n font-weight: 700;\n border: none;\n border-radius: 0.5rem;\n cursor: pointer;\n transition: background-color 0.2s;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n grid-column: 1 / -1; /* 横幅100%(2列分) */\n}\n\n.calculator-decide-button:hover {\n background-color: #059669;\n}\n\n/* 合計と計算ボタン */\n.calculator-total-section {\n padding: 1.5rem;\n border-top: 1px solid #e5e7eb;\n}\n\n.calculator-total-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n}\n\n.calculator-total-label {\n font-size: 1.125rem;\n font-weight: 500;\n color: #374151;\n}\n\n.calculator-total-amount {\n font-size: 1.5rem;\n font-weight: bold;\n color: #111827;\n}\n\n.calculator-per-person {\n color: #2563eb;\n}\n\n.calculator-calculate-button {\n width: 100%;\n padding: 1rem;\n background-color: #10b981;\n color: white;\n font-size: 1.125rem;\n font-weight: bold;\n border: none;\n border-radius: 0.5rem;\n cursor: pointer;\n transition: background-color 0.2s;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n}\n\n.calculator-calculate-button:hover {\n background-color: #059669;\n}\n\n/* レスポンシブ対応 */\n@media (max-width: 640px) {\n .calculator-overlay {\n padding: 0.5rem;\n }\n\n .calculator-modal {\n max-width: 100%;\n margin: 0.5rem;\n }\n\n .calculator-keypad-button {\n padding: 0.75rem;\n font-size: 1.125rem;\n }\n}\n\n.calculator-keypad-button.number.zero-wide {\n grid-column: span 2;\n}\n"]}
|
package/dist/index.esm.js
CHANGED
|
@@ -6421,7 +6421,13 @@ const Calculator = ({ isOpen, onClose, onCalculate, initialValue = '', title, de
|
|
|
6421
6421
|
}) => {
|
|
6422
6422
|
const [input, setInput] = useState(initialValue || '');
|
|
6423
6423
|
const [error, setError] = useState('');
|
|
6424
|
+
const [mounted, setMounted] = useState(false);
|
|
6424
6425
|
const inputRef = useRef(null);
|
|
6426
|
+
// DOM要素の存在確認
|
|
6427
|
+
useEffect(() => {
|
|
6428
|
+
setMounted(true);
|
|
6429
|
+
return () => setMounted(false);
|
|
6430
|
+
}, []);
|
|
6425
6431
|
useEffect(() => {
|
|
6426
6432
|
if (isOpen) {
|
|
6427
6433
|
setInput(initialValue || '');
|
|
@@ -6543,20 +6549,34 @@ const Calculator = ({ isOpen, onClose, onCalculate, initialValue = '', title, de
|
|
|
6543
6549
|
setInput(normalizeNumberString(taxExcluded, decimalPlaces));
|
|
6544
6550
|
setError('');
|
|
6545
6551
|
};
|
|
6546
|
-
if (!isOpen)
|
|
6552
|
+
if (!isOpen || !mounted)
|
|
6547
6553
|
return null;
|
|
6548
6554
|
const modal = (jsx("div", { className: "calculator-overlay", children: jsxs("div", { className: "calculator-modal", children: [title || description ? (jsxs("div", { className: "calculator-header", children: [jsxs("div", { children: [title && jsx("h2", { className: "calculator-title", children: title }), description && jsx("p", { className: "calculator-subtitle", children: description })] }), jsx("button", { onClick: onClose, className: "calculator-close-button", "aria-label": "\u9589\u3058\u308B", children: jsx(Icon, { icon: faTimes, className: "w-5 h-5" }) })] })) : (jsxs("div", { className: "calculator-header", children: [jsx("div", {}), jsx("button", { onClick: onClose, className: "calculator-close-button", "aria-label": "\u9589\u3058\u308B", children: jsx(Icon, { icon: faTimes, className: "w-5 h-5" }) })] })), jsx("div", { className: "calculator-display", children: jsx(CalculatorDisplay, { value: input, error: error, inputRef: inputRef, editable: true, onChange: (v) => setInput(v), numberFormatOptions: numberFormatOptions }) }), jsx(CalculatorKeypad, { onButtonClick: handleButtonClick, onEqual: handleEqual, onDecide: handleDecide, onTaxInclude: handleTaxInclude, onTaxExclude: handleTaxExclude, enableTaxCalculation: enableTaxCalculation, decimalPlaces: decimalPlaces })] }) }));
|
|
6549
|
-
|
|
6555
|
+
// DOM要素の存在確認を行ってからポータルを作成
|
|
6556
|
+
if (typeof document !== 'undefined' && document.body) {
|
|
6557
|
+
return createPortal(modal, document.body);
|
|
6558
|
+
}
|
|
6559
|
+
return null;
|
|
6550
6560
|
};
|
|
6551
6561
|
|
|
6552
|
-
const
|
|
6562
|
+
const CalculatorInputForm = ({ value, onChange, placeholder = 'クリックして金額を入力', className, title, description, enableTaxCalculation = false, decimalPlaces = 6, numberFormatOptions = {}, displayPlaceholder, }) => {
|
|
6553
6563
|
const [isOpen, setIsOpen] = useState(false);
|
|
6564
|
+
const [mounted, setMounted] = useState(false);
|
|
6565
|
+
// DOM要素の存在確認
|
|
6566
|
+
useEffect(() => {
|
|
6567
|
+
setMounted(true);
|
|
6568
|
+
return () => setMounted(false);
|
|
6569
|
+
}, []);
|
|
6554
6570
|
const handleCalculate = (val) => {
|
|
6555
6571
|
onChange(val);
|
|
6556
6572
|
setIsOpen(false);
|
|
6557
6573
|
};
|
|
6574
|
+
// マウント前は何も表示しない
|
|
6575
|
+
if (!mounted) {
|
|
6576
|
+
return null;
|
|
6577
|
+
}
|
|
6558
6578
|
return (jsxs(Fragment, { children: [jsx(NumericFormat, { value: value, onValueChange: (vals) => onChange(vals.value), placeholder: placeholder, className: className, readOnly: true, onClick: () => setIsOpen(true), ...numberFormatOptions }), jsx(Calculator, { isOpen: isOpen, onClose: () => setIsOpen(false), onCalculate: handleCalculate, initialValue: value, title: title, description: description, enableTaxCalculation: enableTaxCalculation, decimalPlaces: decimalPlaces, numberFormatOptions: numberFormatOptions, placeholder: displayPlaceholder })] }));
|
|
6559
6579
|
};
|
|
6560
6580
|
|
|
6561
|
-
export { Button, Calculator, CalculatorDisplay,
|
|
6581
|
+
export { Button, Calculator, CalculatorDisplay, CalculatorInputForm, CalculatorKeypad, Icon };
|
|
6562
6582
|
//# sourceMappingURL=index.esm.js.map
|