Giter Site home page Giter Site logo

keyboard-calculator's Introduction

Calculator Keyboard

About

Calculator keyboard component build on clear ts and css. Can be usefull for number inputs, where users can count some staff.

Install

npm i calculator-keyboard

Idea

Use calculator for numeric inputs where user can count some staff

API

/**
 * Params for onUpdate function
 */
type OnUpdateParams = {
  originalExpression: string[];
  processedExpression: string[];
};

/**
 * Represents a virtual keyboard calculator for basic arithmetic operations.
 */
class KeyboardCalculator {
  /**
   * The internal stack that holds the expression elements.
   */
  stack: string[] = ["0"];

  /**
   * Creates a new instance of the KeyboardCalculator class.
   * @param element - The HTML element to which the calculator will be attached.
   */
  constructor(element: HTMLElement);

  /**
   * A callback function triggered whenever the calculator's state is updated.
   * @param params - An object with the original and processed expressions.
   */
  onUpdate: (params: OnUpdateParams) => any = () => {};

  /**
   * Removes the calculator from the DOM.
   */
  destroy(): void;

  /**
   * Resets the calculator's internal stack to its initial state.
   */
  clearValue(): void;

  /**
   * Returns the current result of the evaluated expression with a precision of four decimal places.
   * Returns undefined if the expression is invalid.
   */
  getCurrentCountedValue(): number | undefined;

  /**
   * Checks if the current expression is valid and can be evaluated.
   */
  isExpressionValid(): boolean;
  // ... (private methods)
}

Can by styled by redefining css vars and change styles for elements below

CSS vars

:root {
  --awesome-calculator-height: 14em;
  --awesome-calculator-hover-background: rgba(128, 128, 128, 0.4);
  --awesome-calculator-hover-border: solid 1px rgba(128, 128, 128, 0.6);
  --awesome-calculator-active-bg: rgba(128, 128, 128, 0.8);
  --awesome-calculator-border-radius: 5px;
  --awesome-calculator-key-color: black;
  --awesome-calculator-key-bg: rgba(128, 128, 128, 0.2);
  --awesome-calculator-gap: 2px;
}

HTML elements structure

// "key" is numbers from 0 to 9, "dot", "divide", "multiply", "plus", "minus", "equal"
<div id='awesome-calculator' class="awesome-calculator-container">
    <div class="key key-${key}" id="awesome-calculator-key-${keyValue}">
        <div>
            ${key}
        </div>
    </div>
</div>

Example in codesandbox

Example on vue in codesandbox

Inspired by keyboard in Tinkoff bank application

keyboard-calculator's People

Contributors

fede4ka1245 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.